Что происходит с более поздними запросами, если в предыдущем запросе была ошибка - PullRequest
1 голос
/ 29 марта 2012

Когда я сохраняю массив записей, т.е. несколько записей, если одна из записей в середине содержит ошибку (sql), что произойдет? Будут ли впредь все записи вставляться или только текущая строка или ни одна из них? Как мне справиться с ситуацией?

PDO Драйвер Mysql

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

Эти ситуации управляются с помощью транзакций базы данных .

Классический пример - когда я хочу перевести деньги со своего счета на другой счет. Необходимо выполнить два запроса:

  1. Снимите деньги с моего счета
  2. Положите деньги на другой счет

Конечно, если второй запрос не удался, я хочу откатить первый и уведомить пользователя об ошибке. Для этого и нужны транзакции.

Если вы не используете транзакции, когда второй запрос не выполняется, первый выполняется в любом случае и не откатывается (поэтому деньги исчезают). Это поведение по умолчанию MySQL.

2 голосов
/ 29 марта 2012

Посмотрите на PDO-транзакции: http://php.net/manual/en/pdo.begintransaction.php

Вы можете проверить, была ли ошибка, и если это так, откатить ваши коммиты или сделать то, что вы собираетесь сделать

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

Общим решением будет использование TRANSACTION (mysql) (pgsql) (mssql) .Что вы можете с этим сделать и какой у вас контроль, зависит от РСУБД.Например: PostgreSQL позволяет вам создать SAVEPOINT, к которому вы можете ROLLBACK TO.

Другим решением будет использование STORED PROCEDURE.В этом случае вы можете указать, что должно произойти, если ошибка происходит с DECLARE .. HANDLER

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...