我正在尝试使用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;
}
?>
答案 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'];