2013-11-10 3 views
1

Я написал скрипт PHP для обработки входа пользователя. Чтобы предотвратить атаку SQL Injection, я использовал функцию mysql_real_escape_string. До сегодняшнего дня все работает хорошо. Я проследил код и нашел проблему; строка, использующая 'mysql_real_escape_string'. У меня изменить его основной команды следующее:Почему mysql_real_escape_string возвращает boolean?

$username=mysql_real_escape_string('sample'); 
var_dump($username) 

Выход:

bool(false) 

На моем локальном веб-сервере (WAMP) все в порядке, но на удаленном хосте появляется проблема! Что не так? (Host РНР 5.4.12)

+4

Вы действительно уверены, что соединение mysql открыто до вызова 'mysql_real_escape_string()'? – hek2mgl

+0

Обратите внимание, что 'mysql_real_escape_string' - это неправильный способ [защититься от SQL-инъекции] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php?lq= 1). Не говоря уже о том, что он устарел ... – DCoder

+0

Функции 'mysql_ *' ** больше не поддерживаются ** и не должны использоваться ни в одной новой кодовой базе. Он постепенно прекращается в пользу новых API. Вместо этого вы должны использовать [** подготовленные заявления **] (https://www.youtube.com/watch?v=nLinqtCfhKY) с помощью [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/mysqli). –

ответ

9

Согласно http://php.net/manual/en/function.mysql-real-escape-string.php

Возвращает сбежавшую строку, или FALSE при ошибке.

Он возвращает false при ошибке;

Добавьте следующую строку в заголовке файла:

error_reporting(E_ALL); 

так что вы можете просмотреть ошибки.

Вполне возможно, что вы забыли сделать соединение MySQL, перед использованием функции mysql_real_escape_string('sample') Thats в соответствии с первой ошибкой в ​​http://us1.php.net/mysql-real-escape-string

Подключение MySQL требуется перед использованием mysql_real_escape_string() иначе об ошибке уровня E_WARNING, а FALSE - .

Вы должны знать, что есть более эффективные способы предотвратить SQL-инъекцию, которые вы можете посмотреть здесь: How can I prevent SQL injection in PHP?

+0

спасибо. Это было решение моей проблемы :) –

1

Возвращает сбежавшую строку, или FALSE при ошибке.

Documentation

Я не могу вам сказать, что ошибка в точности, но это почти наверняка это:

Примечание:

соединение MySQL требуется перед использованием mysql_real_escape_string() иначе возникает ошибка уровня E_WARNING, и возвращается FALSE. Если link_identifier не определен, используется последнее соединение MySQL.

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