将 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;
最佳答案
如果您获得(可能生成的)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;
关于php - 如何使用 PDO 获取 INSERT ON DUPLICATE 影响的行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36667321/