我需要检查使用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;
元芳怎么了
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();
- 2 回答
- 0 关注
- 182 浏览
添加回答
举报
0/150
提交
取消