2010-08-26 5 views
2
$str = 'BEGIN This is a "quote" test. \'Single\' END'; 
echo $str . "\n"; 
echo mysql_real_escape_string($str); 

// Outputs: 
BEGIN This is a "quote" test. 'Single' END 
BEGIN This is a \"quote\" test. \'Single\' END 

Запуск PHP 5.3.2 на CentOS. Насколько я помню, mysql_real_escape_string() будет избегать одиночных кавычек, чтобы предотвратить инъекции sql. Двойные кавычки не имеют к этому никакого отношения, потому что " не запускает и не заканчивает строковый литерал в MySQL!Сегодня mysql_real_escape_string() имеет одинарные кавычки и двойные кавычки

Это вызывает обратную косую черту, которая будет вставлена ​​в данные! Что-то я явно не хочу.

+1

Что изменилось недавно? Обновленная версия PHP? Что-то другое? Он не просто начнет делать это без причины? Изменена ли настройка в php.ini? –

+1

'mysql_real_escape_string' отправляет строку на сервер MySQL, чтобы она удаляла данные, а затем возвращает то, что она отправляет вам. Кроме того, MySQL в своем режиме по умолчанию принимает как '' ', так и' '' как разделители строк. – Powerlord

ответ

3

" действительно запускает строку в MySQL. (См: Strings)

Исключение:

Если режим ANSI_QUOTES SQL является включена, строковые литералы могут быть указаны только в пределах одной кавычки потому строка цитируемая в двойной кавычки интерпретируются как идентификатор .

+0

OK Я вижу, что теперь ... кажется, я использовал функции addslashes() в функции escape-функции моей библиотеки. Но если я вставляю это в базу данных, т. е. 'INSERT INTO myTable VALUES ('BEGIN) Это тест \ quot. \' Single \ 'END')' приведет к обратному косую черту с двойными котировками в просто '' 'или будет обратная косая черта должна быть перенесена в данные? Это означает, что когда я получаю данные, мне придется снять обратную косую черту. –

+0

'\" 'будет преобразован в' '';) – NikiC

+0

ok спасибо nikic Я напугался на секунду. что-то еще вызывает обратные косые черты, которые нужно вставлять в мои данные. (Нет, это не волшебные цитаты) –

0

Звучит как волшебные кавычки, которые были включены.

Это сообщение подробно описывает вашу проблему, а также исправления. http://www.sitepoint.com/forums/showthread.php?t=545824

+0

спасибо, но волшебные цитаты не были включены. проблема в том, что мой код дважды ускорял данные (один раз в локальной функции и снова в библиотечной функции), что привело к '' 'становлению' \ '', а затем ставлю' \\ '', который стал бы \ «после вставки в базу данных. Принятый ответ очистил мое замешательство. –

+0

Ну, честно говоря, дополнительные кавычки именно в чем проблема. Поэтому, хотя я не мог понять, что ваш код сделал это в другом месте, я точно определил причину, просто не агент ;-) –

+0

ах, очень верно. надеюсь, кто-то с подобной проблемой будет искать этот вопрос и один из его ответов и прийти к решению:} –

Смежные вопросы