PDA

Просмотр полной версии : [Вопрос] Проблема с MySql



MassonNN
24.05.2020, 18:10
func SaveCodex() {
query = "";
for(new i; i < CODEX_MAX; i++) {
strcat(query, "UPDATE `Codex` SET ");
format(string256, 150, "`Name` = '%s', ", Codex[i][codexName]);
strcat(query, string256);
format(string256, 150, "`Stars` = '%d' ", Codex[i][codexStars]);
strcat(query, string256);

format(string256, 128, "WHERE `id` = '%d'", i);
strcat(query, string256);
mysql_query(dbHandle, query, false);
}
return 1;
}


Пробовал посмотреть такую инфу по инету, решения так и не нашел

Проблема заключается вот в чем. При вызове функции запросы начинают накладываться друг на друга, и в итоге в MySql я получаю следующее:

[13:32:43 05/24/20] [ERROR] CMySQLQuery::Execute - (error #1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE `Codex` SET `Name` = 'Вторая статья', `Stars` = '0' WHERE `id' at line 1 (Query: "UPDATE `Codex` SET `Name` = '11', `Stars` = '0' WHERE `id` = '0'UPDATE `Codex` SET `Name` = 'Вторая статья', `Stars` = '0' WHERE `id` = '1'UPDATE `Codex` SET `Name` = 'Третья статья', `Stars` = '0' WHERE `id` = '2'UPDATE `Codex` SET `Name` = 'Четвертая статья', `Stars` = '0' WHERE `id` = '3'UPDATE `Codex` SET `Name` = 'Пятая статья', `Stars` = '0' WHERE `id` = '4'UPDATE `Codex` SET `Name` = 'Шестая статья', `Stars` = '0' WHERE `id` = '5'UPDATE `Codex` SET `Name` = 'Седьмая статья', `Stars` = '0' WHERE `id`")
[13:32:43 05/24/20] [DEBUG] mysql_query - connection: 1, query: "UPDATE `Codex` SET `Name` = '11', `Stars` = '0' WHERE `id` = '0'", use_cache: false


Пробовал вбивать в phpmyadmin запросы отдельно - все ок, проблем с синтаксисом нет.

geneff
24.05.2020, 20:01
Кажется мне, что надо сделать вот-так вот:

func SaveCodex() {
for(new i; i < CODEX_MAX; i++) {
query = "";
strcat(query, "UPDATE `Codex` SET ");
format(string256, 150, "`Name` = '%s', ", Codex[i][codexName]);
strcat(query, string256);
format(string256, 150, "`Stars` = '%d' ", Codex[i][codexStars]);
strcat(query, string256);

format(string256, 128, "WHERE `id` = '%d'", i);
strcat(query, string256);
mysql_query(dbHandle, query, false);
}
return 1;
}

MassonNN
24.05.2020, 20:02
как я забыл хм? ладно, спасибо)

execution
26.05.2020, 09:08
Зачем эти все извращения, если всё можно сделать одним форматированием?)
format(query, sizeof query, "UPDATE Codex SET Name='%q', Stars=%d WHERE id=%d",
Codex[i][codexName], Codex[i][codexStars], i);

Daniel_Cortez
26.05.2020, 11:33
^^^^
... не говоря уже о том, что, по-хорошему, для запросов следует использовать mysql_format(). Иначе, если название в Codex[i][codexName] было введено пользователем, то можно словить SQL-инъекцию.

MassonNN
26.05.2020, 14:55
Зачем эти все извращения, если всё можно сделать одним форматированием?)
format(query, sizeof query, "UPDATE Codex SET Name='%q', Stars=%d WHERE id=%d",
Codex[i][codexName], Codex[i][codexStars], i);
Для логического ветвления, которое не представлено в этом коде, а может и нахрена оно мне))) подумаю еще

- - - Добавлено - - -

Ну у меня форматируется в самом вводе, если ты про символы, ибо они же будут отображаться хреново также и в диалогах и т.д., поэтому там я и проверяю на запретные символы, или это не cойдет?

Pa4enka
26.05.2020, 15:23
Поддерживаю пользователей выше. К чему вызывать strcat если используется format?

Daniel_Cortez
26.05.2020, 16:47
Для логического ветвления, которое не представлено в этом коде
В следующий раз, пожалуйста, не стесняйтесь уточнять такие подробности сразу в 1-м посте, чтобы у других людей не было к вам лишних вопросов.

И да, я так понимаю, проблема решена?

MassonNN
26.05.2020, 18:28
В следующий раз, пожалуйста, не стесняйтесь уточнять такие подробности сразу в 1-м посте, чтобы у других людей не было к вам лишних вопросов.

И да, я так понимаю, проблема решена?

да.