首页 > 解决方案 > 为什么条件不满足时查询仍然运行?

问题描述

我得到了以下链接到数据库的测试 SQL 语句。我在数据库中没有任何匹配 900 的记录,但它返回结果 = 1 而不是 0。我能知道这是什么原因吗?

$query = "update mytable set verify = 'yes' where number ='900'";

$result = $conn->query($query);

if (!$result){
    $json_out = "[" . json_encode(array("result"=>0)) . "]";        
}
else {
    $json_out = "[" . json_encode(array("result"=>1)) . "]";        
}

echo $json_out;

标签: phpmysqlmysqlirows-affected

解决方案


您得到 1 结果,因为您没有检查受影响的行。查询没有错误,因此您得到 1 结果。

为了使您的结果准确,您需要检查零与非零受影响的行。

http://php.net/manual/en/mysqli.affected-rows.php

未经测试的建议:

echo json_encode(['result' => (int)($conn->query("UPDATE mytable SET verify = 'yes' WHERE number = '900'") && $conn->affected_rows)]);

换句话说,如果查询返回非假结果并且受影响的行结果非零,则整个条件的计算结果为true。如果你转换true为整数,你得到 1;false变为 0。


推荐阅读