Почему необходимо использовать идентификатор ссылки в качестве входа при использовании mysql_real_escape_string (). Я знаю, что функция должна использоваться с MySQL-запросами, но функция на самом деле просто манипулирует строкой.
Из руководства по PHP :
Вызывает специальные символы в unescaped_string, принимая во внимание текущий набор символов соединения, чтобы можно было разместить его в mysql_query (). Если необходимо вставить двоичные данные, эту функцию необходимо использовать.
а также:
Если идентификатор ссылки не указан, предполагается последняя ссылка, открытая mysql_connect (). Если такой ссылки не обнаружено, она попытается создать такую, как если бы mysql_connect () был вызван без аргументов. Если соединение не установлено или не установлено, генерируется ошибка уровня E_WARNING.
Для определения набора символов необходимо соединение.
Прочтите http://ilia.ws/archives/103-mysql_real_escape_string-versus-Prepared-Statements.html
Например, если используется набор символов GBK, он не будет преобразовывать недопустимую многобайтную последовательность 0xbf27 (¿') в 0xbf5c27 (¿\' или в GBK – один действительный многобайтовый символ, за которым следует одиночная кавычка). Чтобы определить правильную методологию экранирования, mysql_real_escape_string () должен знать используемый набор символов, который обычно извлекается из курсора подключения к базе данных.
Возможно, как следствие этой статьи, но четко после нее в mysql добавлена функция mysql_set_charset () . Кодировка – это свойство соединения mysql (ресурса).
Если у вас несколько соединений, вы действительно должны передать их mysql_real_escape_string () (и всегда используйте mysql_set_charset () вместо SET NAMES).
Если вы не передадите ресурс соединения, функция будет использовать последнее соединение, установленное вашим скриптом. Если кодировка двух (или более соединений) отличается от результата real_escape_string (), может быть неверно истолкована сервером (ожидая другого кодирования и, следовательно, разных правил экранирования).
И так как это не мешает сделать это, даже если у вас есть только одно соединение (можете ли вы сказать с абсолютной уверенностью, что это будет так до конца времени?) Просто передавайте его всегда.
mysql_real_escape_string
:
Вызывает специальные символы в unescaped_string, принимая во внимание текущий набор символов соединения, чтобы можно было разместить его в mysql_query ().