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