mysql_real_escape_string перестала работать, когда я переместил код на другой сервер

Следующий код прекрасно работает в моей локальной установке xampp (Windows 7), но когда я портировал его на сервер Win2K8 R2, элемент mysql_real_escape_string не работает. Когда я прокомментирую это, он отлично работает. Я уверен, что это имеет какое-то отношение к файлу php.ini, но не может точно определить, что это такое. Возможно, мой код должен был быть написан по-разному для начала.

function add_asset($asset_type_ID, $org_ID, $asset_desc, $asset_cost, $asset_value, $purchase_date) { global $db; $asset_desc = mysql_real_escape_string($asset_desc); $query = "INSERT INTO assets (asset_ID, asset_type_ID, org_ID, asset_desc, asset_cost, asset_value, purchase_date) VALUES (DEFAULT, '$asset_type_ID', '$org_ID', '$asset_desc', '$asset_cost', '$asset_value', '$purchase_date')"; $add_asset = $db->exec($query); $last_asset_ID = $db->lastInsertId(); return $last_asset_ID; 

В частности, когда запись вводится в mysql, поле asset_desc пустое.

Спасибо!

ОБНОВЛЕНИЕ: просмотрев журнал ошибок PHP, я нашел следующее:

[ function.mysql-real-escape-string ]: доступ запрещен для пользователя '' @ 'localhost' (с использованием пароля: НЕТ)

Похоже, что все учетные данные, которые вы используете для подключения к базе данных в вашей системе dev, не работают на вашем сервере.

mysql_real_escape_string() требует активного соединения MySQL для правильной работы; если вы не подключены к базе данных, это не удастся.

  • Проверьте, где бы вы ни находили код, который вы вызываете mysql_connect() ; из сообщения об ошибке кажется, что ваша система dev полагается на значения по умолчанию для Mysql .

  • В качестве альтернативы ресурс соединения может быть недоступен для mysql_real_escape_string() в системе сервера. Из документации для mysql_real_escape_string() (акцент мой):

    link_identifier

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

    Возможно, ваш сервер-разработчик настроен таким образом, что вызов mysql_connect() без аргументов устанавливает соединение с сервером базы данных MySQL. Наиболее вероятными причинами этого являются либо dev MySQL сервер, позволяющий анонимные подключения, либо php.ini указывает допустимые учетные данные по умолчанию.

    Однако это не удается при производстве, скорее всего, потому, что сервер производства MySQL не разрешает анонимные подключения, а в php.ini не указаны учетные данные по умолчанию.

    Проверьте код в ситуациях, когда можно прийти к вызову mysql_real_escape_string() без вызова mysql_connect() сначала (обратите внимание, что при установлении соединения с PDO в этом случае не учитывается).

  • Поскольку вы используете PDO, подумайте о переходе на подготовленные операторы , что полностью устранит необходимость в mysql_real_escape_string() .

Вероятно, вы думаете о «волшебных цитатах»,

http://php.net/manual/en/security.magicquotes.disabling.php

Эта функция устарела в php 5.3 http://php.net/manual/en/function.mysql-escape-string.php

Вам придется переписать свой код, в идеале использовать PDO с этого момента и использовать подготовленные инструкции.

Быстрый ответ:

Сначала подключиться к базе данных

Затем используйте mysql_real_escape_string.

А не наоборот……