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

时间:2013-11-19 07:52:22

标签: php mysql pdo

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

4 个答案:

答案 0 :(得分:2)

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

如果您的update声明是

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

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

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

答案 1 :(得分:0)

我希望尽可能避免额外的查询,幸运的是,我的一位同事指出我可以为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);

答案 2 :(得分:-1)

这是另一种方式:

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

select count(*)对于简单查询更好。但是,如果您使用连接更新多个表,则无法获得正确的结果。

答案 3 :(得分:-2)

在model中添加列update_time。每当更新model.Automatically保存该字段中的更新时间。 和 怎么样这样查询

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