我正在使用 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/