Php – Mysqli: Сделки

У меня есть много запросов на выбор вставки, я написал запрос транзакции, но хочу знать, нужно ли его исправлять или исправлять.

Также, если все в порядке, я получаю успешное завершение транзакции! » , но если что-то не так, то сообщение об ошибке скоро, поэтому путайте его работу или нет.

Будут ли $result_a и $result_b , если $result_Cb FAIL или любой другой и тиски?

Ниже я попытался. Пожалуйста, дайте мне знать, если что-то не так:

 try { /* switch autocommit status to FALSE. Actually, it starts transaction */ global $db; mysqli_autocommit($db, FALSE); $sqla ="INSERT INTO A () VALUES () "; $result_a = mysqli_query($db,$sqla); if($result_a){ $sqlb ="INSERT INTO B () VALUES () "; $result_b = mysqli_query($db,$sqlb); if($result_b){ $sqlCb ="UPDATE CB () SET ... "; $result_Cb = mysqli_query($db,$sqlCb); } else { echo "ERROR" ; } } else { echo "ERROR" ; } mysqli_commit($db); echo 'Transaction completed successfully!'; } catch (Exception $e) { echo 'Transaction failed: ' . $e->display_notification_centered(_("transaction rolled back")); mysqli_rollback($db); } /* switch back autocommit status */ mysqli_autocommit($db, TRUE); 

Выше всего просто обновление вставки, одна из моих страниц содержит

 SELECT >> INSERT >> UPADATE >> SELECT >> INSERT ... 

поэтому, пожалуйста, дайте мне знать, если что-то пошло не так. Я уверен в своих значениях CORRECT.

EDIT: 14-02-2014 (добавьте MY MODIFIED CODE BELOW, поскольку я столкнулся с некоторой проблемой при откате на некоторых страницах)

 function autocommitfalse(){ global $db; /* switch autocommit status to FALSE. Actually, it starts transaction */ return mysqli_autocommit($db, FALSE); } function autocommittrue(){ global $db; return mysqli_autocommit($db, TRUE); } function commitquery(){ global $db; return mysqli_commit($db); } function rollbackedquery(){ global $db; return mysqli_rollback($db); } =============================================================================== try { autocommitfalse(); $SQLSELECT = "SELECT * FROM BC "; $result_as = mysqli_query($db,$SQLSELECT); if(!$result_as ){ throw new Exception('Wrong SQL SELECT: ' . $SQLSELECT_a. ' Error: '.db_error_msg($db) . db_error_no()); } $sqla ="INSERT INTO A () VALUES () "; $result_a = mysqli_query($db,$sqla); if(!$result_a){ throw new Exception('Wrong SQL SELECT: ' . $result_a. ' Error: '.db_error_msg($db) . db_error_no()); } $sqlb ="INSERT INTO B () VALUES () "; $result_b =mysqli_query($db,$sqlb); if(!$result_b){ throw new Exception('Wrong SQL SELECT: ' . $result_a. ' Error: '.db_error_msg($db) . db_error_no()); } $sqlCb ="UPDATE CB () SET ... "; $result_Cb = mysqli_query($db,$sqlCb); if($result_Cb === false && mysqli_affected_rows($db) == 0 ){ throw new Exception('Wrong SQL SELECT: ' . $result_a. ' Error: '.db_error_msg($db) . db_error_no()); } commitquery(); echo 'Transaction completed successfully!'; } catch (Exception $e) { echo"<br \>"; echo "<table align=center><tr><td>"; echo $e->getMessage(); echo "</td></tr></table>"; echo"<br \>"; echo display_error(_("Transaction failed: transaction rolled back")); rollbackedquery(); } autocommittrue(); 

Если что-то не так ..пожалуйста, дайте мне знать с изменением в нем (выше кода). Так что я более ясен …. поскольку у меня есть много, если и только запрос, и на моей странице я получаю откат, но некоторые страницы его не , 🙁