准备好的声明不起作用 - 空白页

Prepared Statement not working- Blank page

我有这个代码

$con = new mysqli('####', '####',   '####', '####');
if(mysqli_connect_errno()){
echo 'Connection Failed:' . mysqli_connect_errno();
exit();
}

//Variables

$user = $_POST['username'];
$zone = $_POST['password'];
$pass = strtoupper(hash("whirlpool", $zone));

//Prepare
if($stmt = $con -> prepare("SELECT * FROM `accounts` WHERE Username=? AND Key=?")){






$stmt -> bind_param("ss", $user, $pass);
$stmt -> execute();
$stmt -> bind_results($result);
$stmt -> fetch();
if($result) {

    $_SESSION['username'] = $user;
    $url = 'home.php';
    echo '<META HTTP-EQUIV=Refresh CONTENT="1; URL='.$url.'">';
} else {

    echo 'Login Failed';
}

}
?>

我是 Prepared statements 的新手,我无法让它工作。 尝试登录时,我只得到一个没有错误的空白页面。我知道我已连接到数据库,因为如果我删除准备好的语句并以不安全的方式执行它,一切都会正常登录。

请注意。我一直在查找有关准备好的语句的教程,以便我可以学习更安全地编码。我绝不是专业人士。任何提示将不胜感激。

根据@AbrikChakraborty 的评论,您只需在字段名称中添加反引号:

if($stmt = $con -> prepare("SELECT * FROM `accounts` WHERE Username=? AND `Key`=?")){

根据@caCtus 评论:

$stmt -> bind_result($result);

如果您真的想绑定未知数量的返回字段,您可以检查 this answer 或只使用 PDO。

验证实际查询是否获取结果。我怀疑查询本身 returns 空结果。

"SELECT * FROM `accounts` WHERE Username=$user AND Key=$pass"

Warning: mysqli_stmt::bind_result(): Number of bind variables doesn't match number of fields in prepared statement in C:\xampp\htdocs\newsystem\loginadd.php

那是因为你 select *(所有字段)。您应该更具体地说明要获取的字段(例如 SELECT id FROM ...)。
看看 examples on PHP doc:select 编辑了 2 个字段,bind_result() 的 2 个参数。