我用它来更新表格。 validator
是一个随机生成的20个字符的字符串,与其他变量一起用于验证数据的有效性。
我认为,如果Response
和Validator
与同一行匹配,则表格应仅更新FixtureID
。
+-----------+----------------------+----------+
| FixtureID | Validator | Response |
+-----------+----------------------+----------+
| 1 | 9eb593bd154b655019ad | U |
| 1 | 4b80ac0ac204be8968e4 | U |
| 2 | a2d278612994d3010595 | U |
| 2 | c01171d690d5dfb141ff | U |
| 3 | 22cd6e5b7f6dd6e76366 | U |
// PHP脚本
$query = "
UPDATE
invites
SET
Response=:response
WHERE
Validator=:validator
AND
FixtureID=:FixtureID
";
$query_params = array(
':response'=>'Y',
':FixtureID'=>'1',
':validator'=>'9eb593bd154b655019ad'
);
$stmt = $db->prepare($query);
$result = $stmt->execute($query_params);
if ( $result ) {
echo 'Success';
} else {
echo 'Invalid';
}
但是,我可以将验证程序更改为x
,而$result
仍然会返回为真。
我真的很欣赏为什么会发生这种情况的方向? 非常感谢。
答案 0 :(得分:1)
$count = $stmt->rowCount();
if ( $count > 0 ) {
echo 'Updated';
} else {
echo 'Not updated';
}
答案 1 :(得分:1)
它返回true
,因为您的查询已成功运行。事实上,它没有改变数据库中的任何内容并不重要。
PDO无法猜测您想要的是至少一次更新。它运行查询,如果没有错误 - 查询成功。
如果您需要应用来处理此类情况,您可能需要考虑首先使用相同的SELECT COUNT(*)
条件运行WHERE
,并向用户报告无需更新。