即使无法识别输入的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!";
}
答案 0 :(得分:0)
您的查询未失败,返回0结果,因此$stmt->execute()
在这种情况下将返回true。一个简单的解决方法是将结果传递给数组并检查它是否为空。
查看PDOStatement::rowCount中的Example #2 Counting rows returned by a SELECT statement
,它解释了为什么不应该将rowCount用于SELECT
以及一种简单的方法来执行相同的操作,而是先使用第二个查询来计算返回的行。我个人不会使用第二个查询,所以这里是编辑过的例子。
if($stmt->execute()) {
$out = [];
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$out[] = $row["name"];
}
if(empty($out)) {
echo "no matching user is found";
} else {
// rest of your code
}
} else {
return $db->errorInfo();
}
PS:我要感谢这位选民。谢谢,答案真的需要编辑。