为了账号安全,请及时绑定邮箱和手机立即绑定

如何检查pdo更新查询中是否有任何列值已更改

如何检查pdo更新查询中是否有任何列值已更改

PHP
catspeake 2021-05-01 10:08:25
我需要检查使用PDO更新记录时是否有任何列值已更改。我在下面解释我的查询。$qry ="UPDATE cb_driver_info        SET owner_id=:owner_id,           email=:email,           mobile=:mobile,           image=:image        WHERE id=:driver_id";$stmt = $db->prepare($qry);$stmt->bindParam(':owner_id', htmlspecialchars(strip_tags($owner_id)));$stmt->bindParam(':email', htmlspecialchars(strip_tags($email)));$stmt->bindParam(':mobile', htmlspecialchars(strip_tags($mobile)));$stmt->bindParam(':image', htmlspecialchars(strip_tags($image)));$stmt->bindParam(':driver_id', htmlspecialchars(strip_tags($driver_id)));$stmt->execute();在这里,我正在更新记录。我需要检查是否有任何列值在更新时被破坏,然后它将更新return 1,如果同一条记录再次在更新,它将更新return 0。
查看完整描述

2 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

根据的手册中rowCount()的注释,

当更新具有相同值的Mysql表时,什么都没有受到真正的影响,因此rowCount将返回0。

的PHP手册中未明确记录rowCount()。但是,它记录在MySQLUPDATE文档中

如果将列设置为其当前值,MySQL会注意到这一点,并且不会对其进行更新。

结合

UPDATE返回实际更改的行数。

但是,请注意,如果PDO::MYSQL_ATTR_FOUND_ROWS => true在定义PDO对象时添加该选项,则会更改此行为。使用该选项,它将返回受影响的行数,而不管它们的值实际上是否已更新(因此,只要发现匹配WHERE条件的记录,即使值没有更改,它也将返回1 )。

所以你的代码最终会被

$stmt->execute();
return $stmt->rowCount() ? 1 : 0;


查看完整回答
反对 回复 2021-05-14
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您可以使用rowCount()。如果某行受更新影响(即任何列值已更改),则该行将计为1。从MySQL手册

如果将列设置为其当前值,MySQL会注意到这一点,并且不会对其进行更新。
UPDATE返回实际更改的行数。

你之后$stmt->execute()使用

if ($stmt->rowCount()) {

    // some rows changed

    // do something

}

如果您只想在发生更新时返回true / false值,则可以


return $stmt->rowCount() > 0;

或者,如果您未使用严格的类型匹配(例如===),则只需


return $stmt->rowCount();


查看完整回答
反对 回复 2021-05-14
  • 2 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信