0

所以我想做一个简单的登录,它可以工作,但是当我使用 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。

我知道这很简单,但我不知道出了什么问题。

提前致谢。

4

4 回答 4

1

从 ? 中删除引号?它不适用于引号...您可以在此处查看一些示例, http: //php.net/manual/en/mysqli-stmt.bind-param.php

于 2013-10-29T16:03:36.917 回答
1

从 ? 中删除单引号,

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

    $sql->bind_param('s', $password);

而不是 LIKE SHA(?),

你可以使用检查,

   $sql = $mysqli->prepare("SELECT email FROM user WHERE email='Th3lmuu90@gmail.com' AND password = SHA1(?)");
于 2013-10-29T16:05:21.350 回答
0

请仔细查看使用示例

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

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

于 2013-10-29T16:07:22.440 回答
0

首次使用

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

然后使用

... AND password LIKE ?...
于 2013-10-29T16:14:32.357 回答