Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Экранирование символов в запросе к БД

5.7K
25 июля 2011 года
Lindemann66
193 / / 21.07.2011
Необходимо решить проблему экранирования символа ' в запросе на добавление

Код выглядит следующим образом:
 
Код:
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);


а потом выполнить экранирование кавычек в параметрах
Тогда вопрос, какой функцией можно произвести экранирование в С++?
Не вручную же экранировать(Заменой символов) ?
278
25 июля 2011 года
Alexander92
1.1K / / 04.08.2008
[QUOTE=Lindemann66]
То есть, когда в строке появляется символ ' , это вызывает ошибку
[/QUOTE]
Ошибку чью? Компилятора? Или сервера БД?
5.7K
25 июля 2011 года
Lindemann66
193 / / 21.07.2011
Сервера БД
5.7K
25 июля 2011 года
Lindemann66
193 / / 21.07.2011
Апостроф же разбивает строку
Вобщем, придётся, по всей видимости, вручную удалять его из строки, деваться некуда
8
25 июля 2011 года
mfender
3.5K / / 15.06.2005
есть ещё замечательный символ `, который вполне все агличкие кавычки и апострофы заменяет кажись во всех БД, где SQL юзается.

Ну и потом, если верить написанному, там лишняя кавычка (даже две) просто есть после имени таблицы textblocks.
278
25 июля 2011 года
Alexander92
1.1K / / 04.08.2008
mfender, как мне помнится, "`" не заменяет полностью апостроф. Или я неправ? Просто если написать, к примеру,
 
Код:
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++, там все в порядке.
8
25 июля 2011 года
mfender
3.5K / / 15.06.2005
Цитата:
Это просто перенос строки в C / C++, там все в порядке.


Окак! Это теперь так в Сях строки переносятся? ))))

8
25 июля 2011 года
mfender
3.5K / / 15.06.2005
Цитата: Alexander92
mfender, как мне помнится, "`" не заменяет полностью апостроф. Или я неправ?


Насколько мне известно, никто ругаться не будет, и хоть какая-то страховка в случае, если не экранируются особые символы.

278
25 июля 2011 года
Alexander92
1.1K / / 04.08.2008
Цитата: mfender
Окак! Это теперь так в Сях строки переносятся? ))))



 
Код:
#include <iostream>

int main(void) {
    char *s = "12345"
        "67890";
    std::cout << s << std::endl;
    return 0;
}

Прекрасно компилируется и выдает на экран 1234567890, что и следовало ожидать. :)

[QUOTE=mfender]
Насколько мне известно, никто ругаться не будет
[/QUOTE]
Тот пример, который я вышел написал, приводит к ошибке вида "Unknown column 'field_value'". СУБД - MySQL.
5.7K
25 июля 2011 года
Lindemann66
193 / / 21.07.2011
Цитата: mfender
Насколько мне известно, никто ругаться не будет, и хоть какая-то страховка в случае, если не экранируются особые символы.


увы, ругнётся, только что проверил
по формату параметры нужно разделять именно апострофом '
пришлось мне его удалять)

8
25 июля 2011 года
mfender
3.5K / / 15.06.2005
Цитата: Lindemann66
по формату параметры нужно разделять именно апострофом '


Сам понял что написал?

5
25 июля 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Lindemann66
Необходимо решить проблему экранирования символа ' в запросе на добавление


Вы пробовали разобраться в параметризированных SQL-запросах?

5.7K
26 июля 2011 года
Lindemann66
193 / / 21.07.2011
Цитата: mfender
Сам понял что написал?



конечно!

INSERT INTO textblocks"
" VALUES(параметр, 'параметр', 'параметр', параметр, параметр)", link.page_id, link.textblock,
link.tagname, link.countrep, link.link_id

это же очевидно!

5.7K
26 июля 2011 года
Lindemann66
193 / / 21.07.2011
Цитата: hardcase
Вы пробовали разобраться в параметризированных SQL-запросах?


немного пробовал

5
26 июля 2011 года
hardcase
4.5K / / 09.08.2005
Цитата: Lindemann66
немного пробовал


INSERT предложение также можно параметризировать.

5.7K
26 июля 2011 года
Lindemann66
193 / / 21.07.2011
да, я думал над этим
посмотрим
Это кстати первый выход из ситуации сейчас, и пока единственный, спасибо
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог