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

标签 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;

最佳答案

如果您获得(可能生成的)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/

相关文章:

php - 如何在 yii 中创建客户端自定义规则

php - 根据变量是否存在插入或更新记录

php - 为什么 PDO debugDumpParams 截断查询

php - 使用 PHP end() 函数分配新 id

php - 检测用户平台

php - 如何根据正则表达式格式化字符串?

php - 在哪里可以找到用 PHP 编写的 JSLint/js 验证解析器?

MySQL 主键查询扫描 5000 倍太多的行

php - 从 mysql 查询中获取 1 个字符串

MySQL 触发器采用文本变量