使用 mysqli 登录在通过bind_param插入值时会磨损


Login using mysqli goes worng when incerting values through bind_param

所以我想进行一个简单的登录并且它可以工作,但是当我使用bind_param时,它总是显示 0 行。

这是代码:

session_start();
include("config.php");
$email = $_POST['email'];
$password = $_POST['password'];
if ($sql = $mysqli->prepare("SELECT email FROM user WHERE email='?' AND password LIKE SHA1('?')")) {
    $sql->bind_param('ss',$email, $password);
    $sql->execute();
    $sql->store_result();
    $num = $sql->num_rows;
    $sql->close();
    if($num>0){
        echo "true";
    }else{
        echo "false";
    }
}

确认我收到了电子邮件和密码字段,但查询仅在我手动输入它们而不是"?"并删除bind_param时获得结果。

我知道这很简单,但我无法弄清楚出了什么问题。

提前谢谢。

从 中删除引号 ?它不会使用引号...你可以在这里查看一些例子,http://php.net/manual/en/mysqli-stmt.bind-param.php

从 ?中删除单引号,

 if ($sql = $mysqli->prepare("SELECT email FROM user WHERE email='Th3lmuu90@gmail.com' AND password LIKE SHA1(?)")) {
    $sql->bind_param('s', $password);

而不是像 SHA(?),

您可以使用检查,

   $sql = $mysqli->prepare("SELECT email FROM user WHERE email='Th3lmuu90@gmail.com' AND password = SHA1(?)");

请仔细查看使用示例:

$mysqli->prepare("SELECT District FROM City WHERE Name=?")
                                                       ^

如果你引用占位符,它不再有任何特殊的含义:它变成了一个字面上的问号。

首次使用

$password = sha1($_POST['password']);

然后使用

... AND password LIKE ?...