获取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'