Php - Mysqli: Сделки

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

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

Будет$result_a а также$result_b будет откат, если$result_Cb НЕДОСТАТОК или какой-то другой и стихотворный?

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

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 ...

поэтому, пожалуйста, дайте мне знать, если что-то пошло не так. Я в безопасности со своими ПРАВИЛЬНЫМИ значениями базы данных.

РЕДАКТИРОВАТЬ: 14-02-2014 (добавьте МОЙ ИЗМЕНЕННЫЙ КОД НИЖЕ, так как я столкнулся с некоторой проблемой при откате на некоторых страницах)

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();

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

Ответы на вопрос(0)

Ваш ответ на вопрос