我只是想知道为什么如果我只传递随机数据,查询返回true?
$dbuser = 'root';
$dbpass = 'root';
$formpost = false;
try
{
$dbh = new PDO('mysql:host=127.0.0.1;dbname=loginexample', $dbuser, $dbpass);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
if(!empty($_POST['username']) && !empty($_POST['password']))
{
$formpost = true;
$username = $_POST['username'];
$password = $_POST['password'];
}
if($dbh && $formpost)
{
$sql= "SELECT username, password FROM user WHERE username='$username' AND password='$password'";
if($dbh->query($sql))
{
echo 'true';
}
}
答案 0 :(得分:3)
PDO::query
将始终返回PDOStatement
个对象。 (返回没有行不是错误。)在PHP中,任何对象都将计算为布尔true
,因此if
条件将通过。
答案 1 :(得分:3)
因为PDO::query()
返回 PDOStatement 对象来表示结果集。即使没有返回任何结果,查询仍然成功(即它不包含语法错误,表存在等)。
要检查空虚,可以使用fetchAll()
并在其上运行count()
功能。
答案 2 :(得分:1)
这一行:if($dbh->query($sql))
可能不会返回包含任何已找到记录的对象,但它仍返回一个对象。例如,一个可能告诉您找到的行数等于零的对象。
根据找到的记录数量尝试返回true或false ....
答案 3 :(得分:0)
PDO :: query()返回PDOStatement对象,或者失败时返回FALSE。
我的猜测是查询成功获得匹配的所有零行