将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;
答案 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;