query.Format("INSERT INTO textblocks"
" VALUES(%d, '%s', '%s', %d, %d)", link.page_id, link.textblock,
link.tagname, link.countrep, link.link_id);
Экранирование символов в запросе к БД
Код выглядит следующим образом:
Код:
То есть, когда в строке появляется символ ' , это вызывает ошибку
Какие у кого есть идеи, как можно решить эту проблему?
Можно, наверное, записать код так
Код:
query.Format("INSERT INTO textblocks"
" VALUES(%d, \"%s\", \"%s\", %d, %d)", link.page_id, link.textblock,
link.tagname, link.countrep, link.link_id);
" VALUES(%d, \"%s\", \"%s\", %d, %d)", link.page_id, link.textblock,
link.tagname, link.countrep, link.link_id);
а потом выполнить экранирование кавычек в параметрах
Тогда вопрос, какой функцией можно произвести экранирование в С++?
Не вручную же экранировать(Заменой символов) ?
То есть, когда в строке появляется символ ' , это вызывает ошибку
[/QUOTE]
Ошибку чью? Компилятора? Или сервера БД?
Сервера БД
Вобщем, придётся, по всей видимости, вручную удалять его из строки, деваться некуда
Ну и потом, если верить написанному, там лишняя кавычка (даже две) просто есть после имени таблицы textblocks.
Код:
INSERT INTO `table_name` SET `field_name`=`field_value`;
вместо
Код:
INSERT INTO `table_name` SET `field_name`='field_value';
то MySQL ругнется.
[QUOTE=mfender]
там лишняя кавычка (даже две) просто есть после имени таблицы textblocks.
[/QUOTE]
Это просто перенос строки в C / C++, там все в порядке.
Цитата:
Это просто перенос строки в C / C++, там все в порядке.
Окак! Это теперь так в Сях строки переносятся? ))))
Цитата: Alexander92
mfender, как мне помнится, "`" не заменяет полностью апостроф. Или я неправ?
Насколько мне известно, никто ругаться не будет, и хоть какая-то страховка в случае, если не экранируются особые символы.
Цитата: mfender
Окак! Это теперь так в Сях строки переносятся? ))))
Код:
#include <iostream>
int main(void) {
char *s = "12345"
"67890";
std::cout << s << std::endl;
return 0;
}
int main(void) {
char *s = "12345"
"67890";
std::cout << s << std::endl;
return 0;
}
Прекрасно компилируется и выдает на экран 1234567890, что и следовало ожидать. :)
[QUOTE=mfender]
Насколько мне известно, никто ругаться не будет
[/QUOTE]
Тот пример, который я вышел написал, приводит к ошибке вида "Unknown column 'field_value'". СУБД - MySQL.
Цитата: mfender
Насколько мне известно, никто ругаться не будет, и хоть какая-то страховка в случае, если не экранируются особые символы.
увы, ругнётся, только что проверил
по формату параметры нужно разделять именно апострофом '
пришлось мне его удалять)
Цитата: Lindemann66
по формату параметры нужно разделять именно апострофом '
Сам понял что написал?
Цитата: Lindemann66
Необходимо решить проблему экранирования символа ' в запросе на добавление
Вы пробовали разобраться в параметризированных SQL-запросах?
Цитата: mfender
Сам понял что написал?
конечно!
INSERT INTO textblocks"
" VALUES(параметр, 'параметр', 'параметр', параметр, параметр)", link.page_id, link.textblock,
link.tagname, link.countrep, link.link_id
это же очевидно!
Цитата: hardcase
Вы пробовали разобраться в параметризированных SQL-запросах?
немного пробовал
Цитата: Lindemann66
немного пробовал
INSERT предложение также можно параметризировать.
посмотрим
Это кстати первый выход из ситуации сейчас, и пока единственный, спасибо