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 关注
- 190 浏览
添加回答
举报