我正在使用Doctrine DBAL,并希望执行一个返回为affected_rows的INSERT ... ON DUPLICATE UPDATE
。似乎您不能使用标准的Dbal executeUpdate,因为INSERT ... ON DUPLICATE UPDATE
和affected_rows是MySQL特定的。这迫使您执行一个标准的SQL语句。
我正在使用依赖项注入将连接($this->connection)插入到类文件中。我是否应该考虑在这些条件下运行INSERT ... ON DUPLICATE UPDATE
,然后进行第二次qry以获得affected_rows。
由于DBAL连接是在每个页面请求上建立和断开的,因此似乎没有出现竞争情况。在这种情况下,我使用的是Symfony2框架,但无论您使用的是什么框架或没有框架,答案都应该对您有所帮助。
在这种情况下,没有理由担心克隆对象/服务。至少在Symfony2(SF2)框架中,大多数服务只在请求期间持续存在。因此,我担心在另一个请求中影响或交叉用户体验是不成问题的。
但回到我的INSERT .. ON DUPLICATE UPDATE
问题,背靠背执行两个查询是完全可以的,并且由于您使用相同的连接来执行两个询问,因此竞争条件不会有任何问题。
两个查询如下
$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