Как правильно экранировать строку через PHP и mysql - PullRequest
1 голос
/ 30 апреля 2011

Может кто-нибудь объяснить, в чем разница между использованием mysql_real_escape_string в строке или переносом `` вокруг столбца.

Например "insert into table (``column``) values ('$string')"

или

$escapestring = mysql_real_escape_string($string);
 "insert into table (column) values ('$escapedstring')"

В чем разница между этими двумя и что мне следует использовать?Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 апреля 2011

Существует разница между обратным тэгом `и одинарной кавычкой '.

Обратный знак предназначен для экранирования имен таблиц и полей, которые могут конфликтовать с зарезервированными словами MySQL. Если бы у меня было поле с именем date и запрос типа SELECT date FROM mytable, мне нужно было бы избежать использования date, чтобы, когда MySQL анализировал запрос, он интерпретировал мое использование date как поле , а не тип данных date.

Одинарная кавычка ' предназначена для литеральных значений, как в SELECT * FROM mytable WHERE somefield='somevalue'. Если somevalue сам содержит одинарные кавычки, то их необходимо экранировать, чтобы предотвратить преждевременное закрытие литерала кавычки.

0 голосов
/ 30 апреля 2011

Эти двое вообще не связаны (насколько я знаю в любом случае)

Из руководства: http://php.net/manual/en/function.mysql-real-escape-string.php

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

По сути, это то, что он делает, он избегает символов, которые небезопасны для выполнения запросов mysql (которые могут сломать или исказить запрос)

То есть o'reily станет o\'reily

...