推进:如何定义从doUpdate返回的“受影响的行”

时间:2009-08-03 09:21:43

标签: propel

在推进中有这个doUpdate函数,它将通过此​​查询返回受影响行的数量。

问题是,如果不需要更新行(因为set值已经与字段值相同),那些行会被计为受影响的行吗?

举个例子,我有下表:

ID | Name  | Books
1  | S1oon | Me
2  | S1oon | Me

让我们假设我编写了一个等效于以下查询的ORM函数:

update `new table` set
Books='Me'
where Name='S1oon';

doUpdate结果会返回什么?它会返回0(因为所有Books列都已经Me,因此无需更新),或者它将是2(因为有2行符合where条件)?

2 个答案:

答案 0 :(得分:2)

在幕后,Propel正在使用PDO的 PDOStatement :: rowCount()方法来返回受影响的行数。所以,简短的回答是你会得到你想象的“2”,但更长的答案是它可能略微取决于PDO如何为你的特定数据库实现该功能。 (我想如果你没有得到2,那么它应该是PDO的一个bug。)

有关详细信息,请参阅the description of rowCount() in the PHP manual

要记住的另一件事是当Propel调用预期会返回行数的方法(如 save() delete())时 - 修改并且可能导致修改多行(例如,如果您添加一本书及其作者,然后通过调用 book-> save()导致两者都被插入),您将获取修改的行数。

答案 1 :(得分:0)

它将返回2.