准备好的声明无效 - 空白页

时间:2015-03-11 13:41:18

标签: php mysql prepared-statement

我有这段代码

$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';
}

}
?>

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

请注意。我刚刚查阅了有关预准备语句的教程,因此我可以学习更安全的代码。我绝不是这方面的专业人士。任何提示将不胜感激。

3 个答案:

答案 0 :(得分:1)

  

警告:mysqli_stmt :: bind_result():绑定变量的数量不包含   匹配预备语句中的字段数   C:\ XAMPP \ htdocs中\ newsystem \ loginadd.php

这是因为您选择*(所有字段)。您应该更加具体地了解您想要获得的字段(例如SELECT id FROM ...) 查看examples on PHP doc:选择了2个字段,bind_result()有2个参数。

答案 1 :(得分:0)

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

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

并根据@caCtus评论:

$stmt -> bind_result($result);

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

答案 2 :(得分:-1)

如果获取结果,请验证实际查询。我怀疑查询本身会返回空结果。

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