如何获取可能受到UPDATE影响的行数


How to get number of rows that COULD have been affected by an UPDATE?

获取MySQL更新影响的行数是一回事,但如何获取update查询的匹配行数?否则,即使我试图更新行的数据与其中已经包含的数据相同,也可能受到更新查询影响的行数?因为在这种特定情况下,DB不会用覆盖数据,因此受影响的行数为0。有没有类似于PDOStatement::rowCount()的PDO方法有帮助?我还希望避免使用辅助SQL语句,否则这个问题毫无意义。

您可以在select子句中使用count()

如果您的update声明是

update your_table
set some_column = 'hello'
where id = 1

然后你可以像这个一样选择受影响的行数

select count(*) as affected_rows
from your_table
where id = 1

如果可能的话,我想避免额外的查询,幸运的是,我的一位同事指出,我可以为PDO实例提供一个特定的MySQL驱动程序选项,强制rowCount方法返回与查询相关的匹配数,而不是受影响的行数,比如:

$options = array(
    PDO::MYSQL_ATTR_FOUND_ROWS => true    // forces the rowCount() method to return the number of matching rows, not the number of affected rows
);   
$connection = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass, $options);

这里有另一种方法:

mysql_query('begin');
mysql_query('update ...');
mysql_affected_rows();
mysql_query('rollback');

对于简单查询,选择count(*)是一个更好的方法。但是,在使用联接更新多个表的情况下,这不会得到正确的结果。

在模型中添加列update_time。无论何时更新模型。自动在该字段中保存更新的时间。和像这个查询怎么样

SELECT * from
table_name
WHERE 'updated_time=12:05:23'