У меня есть база данных классов, которая имеет несколько методов, некоторые из которых выполняют подготовленные операторы для создания новых строк в моих таблицах. В настоящее время все работает нормально, но если что-то должно потерпеть неудачу, есть ли способ остановить дальнейшие запросы и вернуть предыдущие запросы.
Вот лишь небольшой пример того, как обрабатывается моя форма:
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 ошибок я хочу вернуть все запросы и завершить эту обработку формы. Благодаря!
поместить mysqli в режим исключения, добавив эту строку перед подключением mysqli
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Таким образом, код будет чем-то вроде
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; }