Доступ пользователю запрещен при использовании real_escape_string - PullRequest
1 голос
/ 30 октября 2011

Я пытаюсь использовать mysql_real_escape_string () для защиты формы входа.

Используя этот код:

include_once 'access-shared.php';
include_once 'access-databaseconnect.php';
session_start();
$email = mysql_real_escape_string(isset($_POST['email'])) ? mysql_real_escape_string($_POST['email']) : $_SESSION['email'];
$password = mysql_real_escape_string(isset($_POST['password'])) ? mysql_real_escape_string($_POST['password']) : $_SESSION['password'];

Проблема в том, что каждый раз выдает ошибку:

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'xxx'@'localhost' (using password: NO)

Я не могу разобраться с этим, у пользователя db есть все разрешения, а данные имени пользователя верны в файле access-databaseconnect.php. Он отлично работает без mysql_real_escape_string вокруг $ _POST, но, очевидно, оставляет его открытым для внедрения MySQL.

Любая помощь наиболее ценится.

РЕДАКТИРОВАТЬ: Вот содержимое файла access-databaseconnect.php:

<?php 
$dbhost = 'localhost';
$dbusername = 'xxxx';
$dbpassword = 'xxxx';

function dbConnect($db='') {
    global $dbhost, $dbusername, $dbpassword;

    $dbcnx = @mysql_connect($dbhost, $dbusername, $dbpassword)
        or die('Cannot connect to Database:  '.mysql_error());

    if ($db!='' and !@mysql_select_db($db)) 
        die('Cannot connect to Database:  '.mysql_error());
    return $dbcnx;
}
?>

1 Ответ

2 голосов
/ 30 октября 2011

Чтобы использовать mysql_real_escape_string(), вы, должно быть, уже установили соединение через mysql_connect().Если этого не происходит в access-databaseconnect.php или соединение не установлено, вы не сможете вызвать mysql_real_escape_string()

Обновить

Вы определяете функциюdbConnect() в access-databaseconnect.php, но вы никогда не вызываете его.Создайте ваше соединение как

$dbcnx = dbConnect($dbname);

Дополнительное примечание, но не источник вашей проблемы ... Не звоните mysql_real_escape_string() вокруг результата ваших isset() вызовов.Хотя он, скорее всего, безвреден, он не нужен.

$email = mysql_real_escape_string(isset($_POST['email'])) ? mysql_real_escape_string($_POST['email']) : $_SESSION['email'];
// Should be
$email = isset($_POST['email']) ? mysql_real_escape_string($_POST['email']) : $_SESSION['email'];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...