2009-12-30 2 views

ответ

6

От the PHP manual:

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

и:

Если идентификатор связи не определен, последнее звено открыто mysql_connect() предполагается. Если такой ссылки не обнаружено, она попытается создать такую, как если бы mysql_connect() был вызван без аргументов. Если соединение не установлено или не установлено, генерируется ошибка уровня E_WARNING.

Для определения набора символов необходимо соединение.

1

mysql_real_escape_string:

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

3

Есть Распознать http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html

Например, если используется набор GBK характер, она не будет преобразовывать недопустимую последовательность многобайтовую 0xbf27 (¿ «) в 0xbf5c27 (¿\» или в GBK одном действительный многобайтовый символ, за которым следует одиночная цитата). Чтобы определить правильную методологию экранирования, mysql_real_escape_string() должен знать используемый набор символов, который обычно извлекается из курсора подключения к базе данных.

Возможно, как следствие этой статьи, но четко после нее функция mysql_set_charset() была добавлена ​​в расширение mysql. Кодировка - это свойство соединения mysql (ресурса).
Если у вас несколько соединений, вы действительно должны передать их mysql_real_escape_string() (и всегда используйте mysql_set_charset() вместо SET NAMES).
Если вы не передадите ресурс соединения, функция будет использовать последнее соединение, установленное вашим скриптом. Если кодировка двух (или более соединений) отличается от результата real_escape_string(), может быть неверно истолкована сервером (ожидая другого кодирования и, следовательно, разных правил экранирования).
И так как это не мешает сделать это, даже если у вас есть только одно соединение (можете ли вы сказать с абсолютной уверенностью, что это будет так до конца времени?) Просто передавайте его всегда.

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