如何使用PDO获取INSERT ON DUPLICATE影响的行数?

时间:2016-04-16 17:24:35

标签: php mysql pdo

将PHP的PDO与MySQL数据库一起使用,如何获得受INSERT ... ON DUPLICATE KEY UPDATE ...语句影响的行数?

例如,如何使用以下查询完成?

INSERT INTO table1(id,a,b,c)
SELECT id,1,2,3 FROM table2 WHERE x=321
ON DUPLICATE KEY UPDATE a=1,b=2,c=3;

1 个答案:

答案 0 :(得分:0)

如果你得到(可能生成的)SQL代码,你可以通过用正则表达式解析语句来检查要完成的插入次数。

另一种方法是定义触发器。在这种情况下,您必须在执行语句之前设置用户定义的变量,并在执行后通过另一个查询读取它。

CREATE TRIGGER `beforeUpdateTABLENAME`
  BEFORE UPDATE ON `tablename` FOR EACH ROW
  SET @updateRowCount = @updateRowCount + 1;

重置行数

$connection->exec('SET @updateRowCount = 0;');

执行INSERT ... ON DUPLICATE KEY UPDATE ... 并阅读更新次数

$result = $conn->query('SELECT @updateRowCount;');

计算受影响的行=行数 - 更新的行

如果您根本不想区分插入和更新,也可以在INSERT上触发,不需要进行任何计算。

CREATE TRIGGER beforeInsertTABLENAME
  BEFORE INSERT ON `tablename` FOR EACH ROW
  SET @rowsAffectedCount = @rowsAffectedCount + 1;