使用real_escape_string时拒绝用户访问

时间:2011-10-30 16:15:43

标签: php mysql forms

我正在尝试使用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文件中的所有权限和用户名详细信息。它在$ _POST周围没有mysql_real_escape_string的情况下工作得很好,但很明显它会让我对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 个答案:

答案 0 :(得分:2)

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

<强>更新

您在access-databaseconnect.php中定义函数dbConnect(),但您从不调用它。以

创建您的连接
$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'];