我尝试使用mysqli预处理语句从数据库中获取结果,我想将它存储在会话中,但是我失败了。我想将id,用户名,密码和邮件存储到会话中。任何人都可以查看我的代码吗?
$kveri = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$kveri->bind_param('ss', $username, $password);
$kveri->execute();
$kveri->store_result();
$numrows = $kveri->num_rows;
if ( $numrows == 1 )
{
$kveri->bind_result($user_id, $user_username, $user_password, $user_mail);
while ( $kveri->fetch() )
{
$_SESSION['ulogovan'] = true;
$_SESSION['username'] = $user_username;
}
$kveri->close();
echo $_SESSION['username'];
}
答案 0 :(得分:0)
正如您所看到的,如果按原样使用,mysqli非常不方便。千诀,细微差别和陷阱 为了使数据库交互可行,必须使用某种更高级别的抽象,这将承担所有重复的脏工作。
在这种抽象中,PDO似乎是最常见的:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->execute([$username, $password]);
$user = $stmt->fetch();
if ($user) {
$_SESSION['username'] = $user['username'];
}
看 - 当明智地使用时,代码不一定必须具有“战争与和平”的大小
答案 1 :(得分:0)
确保您已启用错误报告,如下所示:
mysqli_report(MYSQLI_REPORT_ALL);
你可能会得到答案。我完美地运行了你的代码,它应该可以工作。
注意,我在开始测试时添加了以下代码(定义了常量但未在此处显示):
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS,DB_NAME);