【发布时间】:2017-10-08 01:18:15
【问题描述】:
即使输入的id 无法识别,$stmt->execute 仍然返回 true,因此程序永远不会输出“错误的 ID 或密码!”。我做错了什么?
$id = $_POST["id"];
$pwd = $_POST["pwd"];
include("./sql/connect.php");
$stmt = $db->prepare("SELECT * FROM list WHERE id = :id AND pwd = :pwd");
$stmt->bindValue(":id", $id);
$stmt->bindValue(":pwd", $pwd);
if($stmt->execute()){
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
echo $row["name"];
}
}else{
echo "Wrong ID or Password!";
}
【问题讨论】:
-
为什么它应该不返回true?
-
从不存储纯文本密码。您应该改用
password_hash()和password_verify()。如果您使用的是 5.5 之前的 PHP 版本,请不要使用 MD5 或 SHA1 来散列密码。相反,您可以使用this compatibility pack。 -
这里没有
return- 只有echo,你想检查是否没有行返回吗? -
$stmt->execute()
Returns TRUE on success or FALSE on failure.没有 anny 匹配的错误 ID 仍将正确执行...阅读php.net/manual/en/pdostatement.execute.php -
返回零行的查询不是错误,它只是一个空结果。