1

我正在使用Doctrine DBAL并想做一个INSERT ... ON DUPLICATE UPDATE返回是受影响的行的地方。似乎您不能使用标准的 Dbal executeUpdate,因为INSERT ... ON DUPLICATE UPDATE并且 affected_rows 是 MySQL 特定的。这迫使您执行标准的准备好的 SQL 语句。

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

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

4

1 回答 1

1

在这种情况下没有理由担心克隆对象/服务。至少使用 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
于 2012-03-15T12:57:38.413 回答