2012-03-31 5 views
1

Я не думаю, что проблема с моим кодом связана с тем, что он работает на моем локальном сервере (EDIT: извините, если это было неправильное место, чтобы спросить, но я могу Не переходите к ServerFault самостоятельно). Однако на удаленном сервере я не могу заставить mysql_real_escape_string() работать. Соединение с базой данных работает, и я соединяюсь перед вызовом функции.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 ("[email protected]")'); 

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

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

Я прекратил читать после: «Я знаю, что мой код не проблема». – PeeHaa

+1

У вас есть ссылка на базу данных, которая работает? 'mysql_real_escape_string' требует активной ссылки. С вашего третьего предупреждения, похоже, что это не так. –

+0

OK. Где-то еще я должен спросить о проблемах конфигурации? – user460847

ответ

8

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

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

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

+0

Я читал это, но я использую то, что рекомендует NearlyFreeSpeech в качестве имени хоста, и вставляет данные в базу данных. – user460847

+1

Вы, вероятно, не должны использовать mysql_real_escape_string, а затем - он должен использоваться после 'mysql_connect' (а не' mysqli_connect', а не 'new PDO', а не каких-либо других вещей), иначе он попытается открыть соединение самостоятельно, используя параметры подключения по умолчанию в php.ini (которые почти наверняка не то, что вы хотите, и на самом деле это то, что вызывает вашу текущую проблему). – cHao

+0

Большое спасибо! Я использовал mysql_connect, и он сработал. – user460847

2

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

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

+0

Я добавил код вставки - не пытаясь скрыть его, просто не понимал, что это важно. – user460847

+0

так, прочитайте мой ответ –

+1

OMG, это уже ответ –

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