所以我想进行一个简单的登录并且它可以工作,但是当我使用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 ?...