我试图使用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'];