Стоп и возврат, если один из нескольких подготовленных операторов не работает

У меня есть база данных классов, которая имеет несколько методов, некоторые из которых выполняют подготовленные операторы для создания новых строк в моих таблицах. В настоящее время все работает нормально, но если что-то должно потерпеть неудачу, есть ли способ остановить дальнейшие запросы и вернуть предыдущие запросы.

Вот лишь небольшой пример того, как обрабатывается моя форма:

if(isset($_POST["someSubmitName"]) : //post variables .... // Start Queries $db->address_table_insert_statement($firstName, $lastName, $companyName, $streetAddress, $streetAddress2, $streetAddress3, $city, $state, $zip, $country, $phone, $fax, $email, $date, $date); $addressId = mysqli_insert_id($db->connection); $db->address_table_insert_statement($firstName, $lastName, $companyName, $billingStreetAddress, $billingStreetAddress2, $billingStreetAddress3, $billingCity, $billingState, $billingZipCode, $billingCountry, $billingPhone, $billingFax, $billingEmail, $date, $date); $billingAdressId = mysqli_insert_id($db->connection); $db->account_table_insert_statement($active, $addressId, $billingAddressId, $dateCreated, $dateModified); endif; 

Опять же, если какой-либо из этих 3 ошибок я хочу вернуть все запросы и завершить эту обработку формы. Благодаря!

Related of "Стоп и возврат, если один из нескольких подготовленных операторов не работает"

  1. поместить mysqli в режим исключения, добавив эту строку перед подключением mysqli

     mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 
  2. Оберните свои запросы в транзакции
  3. Заверните транзакцию в инструкции try..catch и добавьте вызов отката внутри.

Таким образом, код будет чем-то вроде

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); $db = new mysqli(...); ... try { $db->autocommit(FALSE); $db->address_table_insert_statement($firstName, $lastName, $companyName, $streetAddress, $streetAddress2, $streetAddress3, $city, $state, $zip, $country, $phone, $fax, $email, $date, $date); $addressId = mysqli_insert_id($db->connection); $db->address_table_insert_statement($firstName, $lastName, $companyName, $billingStreetAddress, $billingStreetAddress2, $billingStreetAddress3, $billingCity, $billingState, $billingZipCode, $billingCountry, $billingPhone, $billingFax, $billingEmail, $date, $date); $billingAdressId = mysqli_insert_id($db->connection); $db->account_table_insert_statement($active, $addressId, $billingAddressId, $dateCreated, $dateModified); $db->commit(); } catch (\Exception $e) { $db->rollback(); throw $e; }