【发布时间】:2014-06-30 07:01:45
【问题描述】:
我在执行以下准备好的语句时遇到了麻烦。 我使用了相同的准备好的语句代码,并使其在其他地方工作,所以不确定我哪里出错了。我在没有使用串联的准备好的语句的情况下启动并运行了以下脚本,因此我知道我的 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];
}
}
【问题讨论】:
-
使用准备好的语句时不需要转义任何内容。
-
另外,你有什么问题?
-
Mihai - 不确定,把这个放上来看看我的代码是否有任何明显的问题。
-
尝试 --- fetch_all --- 而不是 --- fetch --- php.net/manual/en/mysqli-result.fetch-all.php
-
运气不好。我目前没有收到任何错误。调用脚本的页面只是空白,页面源中没有任何内容。
标签: php sql prepared-statement