我无法实施以下准备好的声明。 我已经使用了相同的预处理语句代码,并使其在其他地方工作,所以不知道我哪里出错了。我已经启动并运行了以下脚本,没有使用连接的预准备语句,因此我知道我的SQL或初始电子邮件/密码验证没有问题。
数据库查询只返回一行,我不认为这会影响我的while数组提取?
电子邮件地址和密码设置为prepared statement ('ss')
中的字符串,假设没有问题。
我在初始查询连接中使用get_password_hash($p)
并且它有效。也许我应该把它包含在这样的绑定参数中:
$ loginQuery-> bind_param( 'SS',$ E,get_password_hash($ P));
而不是......
非常感谢任何建议。
// Array for recording errors:
$login_errors = array();
// Validate the email address:
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$e = $_POST['email'];
} else {
$login_errors['login'] = 'Please enter a valid email address!';
}
// Validate the password:
if (!empty($_POST['pass'])) {
$p = $_POST['pass'];
} else {
$login_errors['pass'] = 'Please enter your password!';
}
if (empty($login_errors)) { // OK to proceed!
// Query the database:
/************NO ISSUES WITH ABOVE; THIS WORKED FINE BEFORE I TRIED CONVERTING TO PREPARED STATEMENTS************/
$pas = get_password_hash($p);
$loginQuery = $dbc->prepare("SELECT id, username, type, IF(date_expires >= NOW(), true, false) FROM user WHERE (email= ? AND pass= ?)");
$loginQuery->bind_param('ss',$e,$pas);
$loginQuery->execute();
$loginQuery->bind_result($l);
while(loginQuery->fetch()){
$login = $l;
$_SESSION['user_id'] = $login[0];
$_SESSION['username'] = $login[1];
}
}
答案 0 :(得分:1)
您在顶部使用变量$p
,但您在下方使用$pas
。
无论如何,你不应该用准备好的陈述做任何mysql_escape_blahblahblah的事情。直接这样做:
$loginQuery->bind_param('ss',$_POST['email'],$_POST['pass']);