mysql_real_escape_string () не работает, хотя я подключен к базе данных - PullRequest
1 голос
/ 31 марта 2012

Я не думаю, что мой код - проблема, потому что он работает на моем локальном сервере (РЕДАКТИРОВАТЬ: извините, если это было неправильное место, чтобы спросить, но я не могу перейти к ServerFault самостоятельно). Однако на удаленном сервере я не могу заставить mysql_real_escape_string() работать. Соединение с базой данных работает, и я подключаюсь перед вызовом функции.

Когда я пытаюсь echo $_POST['email'];, я получаю правильные данные, но когда я пытаюсь echo mysql_real_escape_string($_POST['email']);, я ничего не получаю.

Вот когда я получаю сообщение об ошибке:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: [2002] No such file or directory (trying to connect via unix://please_see_the_faq) in /f5/mysite/public/email_results.php on line 11

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: No such file or directory in /f5/mysite/public/email_results.php on line 11

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /f5/mysite/public/email_results.php on line 11

Возможно ли, что что-то с конфигурацией PHP вызывает это? Я хостинг с NearlyFreeSpeech, если это имеет значение.

Вот мой код вставки:

$db->query('INSERT INTO emails VALUES ("sampleemail@gmail.com")');

А вот как я подключаюсь к базе данных:

@ $db = new mysqli('mysite.db', 'wizard', '(password)', 'mysite');

Ответы [ 2 ]

9 голосов
/ 31 марта 2012

Вы видите эту первую ошибку ... ту, которая говорит "пытается подключиться через unix://please_see_the_faq"?Это означает, что PHP пытается подключиться к вашему серверу MySQL (так же, как это делается через mysql_connect без параметров), но у него нет правильных параметров для подключения.Он даже не знает, где находится сокет базы данных.

Если вы не подключаетесь к базе данных, используя mysql_connect, то вам не следует использовать mysql_real_escape_string.Если вы это сделаете, то он попытается подключиться к базе данных самостоятельно, используя параметры по умолчанию в php.ini (результаты которых вы сейчас видите).Похоже, вы используете mysqli, который является совершенно другим расширением и имеет собственную функцию escape - mysqli_real_escape_string.Используйте это вместо этого.

Или получите подсказку и научитесь использовать подготовленные высказывания, как и предполагали боги.

2 голосов
/ 31 марта 2012

Я полагаю, что ваш код вставки (который вы скрываете как национальный резерв) использует любой другой драйвер, а не обычный mysql.

Это означает, что вы не должны использовать mysql_real_escape_string(), но какую-то специфическую для драйвера функцию экранирования / привязки.

...