1

在推进中有这个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条件)?

4

2 回答 2

2

在底层,Propel 使用 PDO 的PDOStatement::rowCount()方法返回受影响的行数。因此,简短的回答是您将在此处得到“2”,但较长的答案是它可能略微取决于 PDO 如何为您的特定数据库实现该功能。(我认为如果你没有得到 2,那么它应该是 PDO 的一个错误。)

有关详细信息,请参阅PHP 手册中对 rowCount() 的描述

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

于 2009-09-24T16:53:05.603 回答
0

它将返回 2。

于 2009-08-03T11:06:32.573 回答