我一直在用PHP编写一个使用预处理语句的登录脚本但是我无法让它工作,有人能指出为什么这不起作用吗?
每当我登录时,我得到的是“声明失败!”。
//Start session
session_start();
//Include database connection details
require_once('config.php');
//Sanitize the POST values
$login = clean($_POST['login']);
$password = clean($_POST['password']);
$query = $dbconn -> prepare("SELECT * FROM members WHERE login=? AND passwd=?");
$query -> bind_param("ss", $login, $password);
if($query->execute() == true) {
$query -> bind_result($result);
$query -> fetch();
if($result){
$member = mysqli_fetch_assoc($result);
session_regenerate_id();
$_SESSION['SESS_MEMBER_ID'] = $member['member_id'];
$_SESSION['SESS_FIRST_NAME'] = $member['firstname'];
$_SESSION['SESS_LAST_NAME'] = $member['lastname'];
$_SESSION['SESS_IS_ADMIN'] = $member['admin'];
session_write_close();
echo $_SESSION['SESS_MEMBER_ID'];
echo $_SESSION['SESS_FIRST_NAME'];
echo "Test!";
exit();
}else{
echo "Statement failed";
}
}
/* Close statement */
$query -> close();
在config.php中有以下内容:
$dbconn = new mysqli('localhost', 'root', 'password', 'bookingsystem');
用户的数据库结构如下所示:
`members` (`member_id`, `firstname`, `lastname`, `login`, `passwd`, `admin`) VALUES
(1, 'Steve', 'Stone', 'Admin', '5f4dcc3b5aa765d61d8327deb882cf99', 1);
答案 0 :(得分:2)
来自bind_result
上的手册:
请注意,必须在mysqli_stmt_execute()和之后绑定所有列 在调用mysqli_stmt_fetch()之前。
您正在绑定一个变量但是您正在选择6列。您需要将所有6列绑定到变量,然后在条件内部,您不必像已经那样获取另一行,并且您的fetch的结果将在您的变量中可用。
您还应检查fetch
的返回值,而不是$result
或任何其他变量。