Как убедиться, что два запроса MySQL успешны? - PullRequest
2 голосов
/ 19 апреля 2011

У меня есть два запроса MySQL в моем коде PHP.

В основном мне нужно два запроса для выполнения (это два INSERT) запроса, и оба должны быть успешными. Если, например, query1 успешно, но query2 не успешно; Мне нужно откатить query1, так как оба запроса должны быть успешными.

Я использую MyISAM и знаю, что не могу выполнить откат и т. Д., Но есть ли способ решить мою проблему (другое решение), чтобы сделать то, что я хочу?

Они оба зависят друг от друга, так как query1 хранит данные из формы, а query2 вставляет некоторые другие детали в другую таблицу (в основном это счетчик), которая отслеживает общее количество счетчиков для реферальной системы.

Ответы [ 4 ]

3 голосов
/ 19 апреля 2011

После первой вставки вы можете получить идентификатор с помощью mysql_insert_id () и сохранить его.

Затем, когда вы сделаете второй запрос, получите и этот идентификатор. Если идентификатор равен нулю, то это означает, что он не был успешным, и у вас есть старый идентификатор, чтобы вы могли затем удалить его, например,

DELETE FROM table WHERE id='$insertId'

Edit:

Просто обратите внимание, это не полное решение, единственный верный способ - конвертировать в InnoDB

3 голосов
/ 19 апреля 2011

Одним из вариантов будет сохранение идентификатора вставленной записи в первой таблице.Если второй запрос не удался, используйте запрос на удаление, чтобы удалить запись, вставленную первым запросом.Однако я бы посоветовал вам изменить движок на InnoDB, чтобы вы могли использовать транзакции.Или у вас есть особая причина использовать MyISAM (например, полнотекстовый поиск?)

1 голос
/ 19 апреля 2011

Транзакции являются ответом. Если выбранный вами механизм хранения не поддерживает их, и у вас есть такой сценарий, вы, вероятно, выбрали не тот механизм хранения.

1 голос
/ 19 апреля 2011

Звучит так, будто вам нужны транзакции.

http://www.techrepublic.com/article/implement-mysql-based-transactions-with-a-new-set-of-php-extensions/6085922

Они позволяют вам откатить всю серию модификаций базы данных в рамках одной транзакции.

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