当用户使用real_escape_string时拒绝访问


Access denied for user when using real_escape_string

我试图使用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- databasconnect .php文件。如果没有$_POST周围的mysql_real_escape_string,它可以完美地工作,但显然它使它开放给mySQL注入。

任何帮助都是非常感激的。

编辑:下面是access- databaseconconnect .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;
}
?>

为了使用mysql_real_escape_string(),您必须已经通过mysql_connect()建立了连接。如果在access-databaseconnect.php中没有发生这种情况,或者连接没有成功,您将无法调用mysql_real_escape_string()

您在access- databasconnect .php中定义了函数dbConnect(),但从未调用过它。创建连接

$dbcnx = dbConnect($dbname);
附加说明,但不是你的问题的根源…不要在isset()调用的结果周围调用mysql_real_escape_string()。虽然它很可能是无害的,但却是不必要的。
$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'];