Клонировать Dbal-соединение для выполнения вставки в дубликаты Get_Acted_Rows - PullRequest
1 голос
/ 11 марта 2012

Я использую Doctrine DBAL и хочу сделать INSERT ... ON DUPLICATE UPDATE там, где возвращение будет затронутым. Похоже, вы не можете использовать стандартный Dbal executeUpdate, так как INSERT ... ON DUPLICATE UPDATE и disabled_rows специфичны для MySQL. Это заставляет вас делать стандартный подготовленный оператор SQL.

Я использую Dependency Injection, чтобы вставить соединение ($ this-> connection) в файл класса. Должен ли я беспокоиться о запуске INSERT ... ON DUPLICATE UPDATE и последующем выполнении 2-го запроса, чтобы получить disabled_rows при этих условиях.

Кажется, что нет ситуации гонки, так как соединение DBAL создается и разрывается при каждом запросе страницы. В этом случае я использую фреймворк Symfony2, но ответ должен помочь вам независимо от того, какой фреймворк ИЛИ без фреймворка вы используете.

1 Ответ

1 голос
/ 15 марта 2012

Нет причин беспокоиться о клонировании объекта / службы в этой ситуации.По крайней мере, с платформой 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...