php - 克隆 Dbal 连接以在重复的 Get_Affected_Rows 上执行插入操作

标签 php mysql doctrine symfony dbal

我正在使用 Doctrine DBAL并且想要执行 INSERT ... ON DUPLICATE UPDATE,其中返回的是 affected_rows。似乎您不能使用标准的 Dbal executeUpdate,因为 INSERT ... ON DUPLICATE UPDATE 和 affected_rows 是特定于 MySQL 的。这迫使您执行标准的准备好的 SQL 语句。

我正在使用依赖注入(inject)将连接 ( $this->connection ) 插入到类文件中。我是否应该担心运行 INSERT ... ON DUPLICATE UPDATE,然后在这些条件下进行第二次查询以获取受影响的行。

似乎没有竞争情况,因为 DBAL 连接是在每个页面请求时建立和分解的。在这种情况下,我使用的是 Symfony2 框架,但无论您使用的是什么框架或非框架,答案都应该对您有所帮助。

最佳答案

在这种情况下没有理由担心克隆对象/服务。至少在 Symfony2 (SF2) 框架中,大多数服务只在请求期间持续存在。所以我担心影响或交叉另一个请求的用户体验不是问题。

但回到我的 INSERT .. ON DUPLICATE UPDATE 问题,连续执行 2 个查询是完全没问题的,并且不会有任何竞争条件问题,因为您使用的是相同的连接做两个查询。

2 个查询看起来像这样

$sql1 = "INSERT INTO table (...) VALUES (..) ON DUPLICATE KEY UPDATE ...";

$sql2 = "SELECT ROW_COUNT()";

// Expected Results for $sql2
// 0 = no updates
// 1 = new insert
// 2 = update

关于php - 克隆 Dbal 连接以在重复的 Get_Affected_Rows 上执行插入操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9654666/

相关文章:

php - HTML, CSS - 我想创建一个按钮 "Preview",它将向用户显示他的输入

MYSQL 使用一个命令组合两个 GROUP BY 结果

Doctrine 2 教程或书籍?

php - 如何防止 doctrine2 返回某些字段

php - CCAvenue 与 Magento 1.6.2 集成

php - 用于在数据库中插入查询的简单 Jquery 函数

php - 带自定义选择/连接/顺序的 Laravel Eloquent 模型查询

mysql - 在 CI 和分页结果操作中创建 A-Z 链接

php - 如何保持多个mysql数据库中的行同步?最好有 Doctrine

保留在内存中的 PHP 对象