[英]How to check if any column value has changed in pdo update query
我需要检查使用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
。
您可以使用rowCount()
。 如果某行受更新影响(即任何列值已更改),则该行将计为1。 从MySQL 手册 :
如果将列设置为其当前值,MySQL会注意到这一点,并且不会对其进行更新。
UPDATE返回实际更改的行数。
在$stmt->execute()
使用之后
if ($stmt->rowCount()) {
// some rows changed
// do something
}
如果您只想在发生更新时返回true / false值,则可以
return $stmt->rowCount() > 0;
或者如果您不使用严格的类型匹配(即===
),则只需
return $stmt->rowCount();
根据rowCount()
手册中的注释,
当更新具有相同值的Mysql表时,什么都没有受到真正的影响,因此rowCount将返回0。
这在rowCount()
的PHP手册中没有明确记录。 但是,它记录在MySQL UPDATE
文档中 ,
如果将列设置为其当前值,MySQL会注意到这一点,并且不会对其进行更新。
结合
UPDATE返回实际更改的行数。
但是,请注意,如果在定义PDO对象时添加PDO::MYSQL_ATTR_FOUND_ROWS => true
选项,则会更改此行为。 使用该选项,它将返回受影响的行数,而不管它们的值实际上是否已更新(因此,即使这些值没有更改,只要找到与您的WHERE
条件匹配的记录,它将返回1)。
所以你的代码最终会被
$stmt->execute();
return $stmt->rowCount() ? 1 : 0;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.