строки не экранируются при использовании mysql_real_escape_string или добавляет косые черты в mysql - PullRequest
0 голосов
/ 29 ноября 2011

Я использую функцию mysql_real_escape_string php для экранирования данных, полученных из формы. мой код для получения данных формы:

$std_id     =   mysql_real_escape_string($_POST['std_id']);
$name       =   mysql_real_escape_string($_POST['name']);
$family     =   mysql_real_escape_string($_POST['family']);

например, если ввести O'reilly строку в поле формы имени, эта функция работает нормально, и мой запрос тоже выполнен. Но когда я иду в MySQL и мою таблицу, вижу, что эта строка вставляется как О'Рейли , а не О'Рейли . мой запрос:

$sql    =   "insert into student set 
            std_id  =   $std_id,
            name    =   '$name',
            family  =   '$family',
            ";

это происходит, когда также используется функция addlashes ().

Ответы [ 2 ]

2 голосов
/ 29 ноября 2011

В этом все дело. mysql_real_escape_string только для того, чтобы убедиться, что синтаксис запроса правильный . Этот синтаксис запроса будет неправильным:

INSERT INTO ... name = 'O'Reilly'

Терминатор строки ' является неоднозначным / неуместным.
Побег, это становится:

INSERT INTO ... name = 'O\'Reilly'

Теперь синтаксис однозначен, ' после O - это , а не терминатор строки, это буквальное значение. Это все, что mysql_real_escape_string должен делать. Вы не хотите получить значение «O \ 'Reilly” в своей базе данных, потому что это мусор.

Вам следует прочитать Великий эскапизм (или: что нужно знать, чтобы работать с текстом внутри текста) .

2 голосов
/ 29 ноября 2011

Это точно , что должно произойти. Вы хотите вставить в базу данных строку O'reilly, а не O\'reilly, верно?

Косые черты просто говорят MySQL, что следующий ' должен быть буквальным апострофом, а не апострофом / одинарной кавычкой, обозначающей конец строки.


PS: Возможно, вы захотите рассмотреть вопрос об использовании PDO и подготовленных операторов , которые предлагают более понятный синтаксис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...