2016-03-27 11 views
0

私はPHP7のロールバック機能に問題があるようです。ここに私のコードはありますが、私がクエリを提供してそのうちの1つにエラーを置くと、ロールバックされません。それはまだ完了したすべてをコミットします。MySQLiトランザクションを使用してロールバックしコミットする方法は?

function sql_transaction(...$queries) { 
    global $db; 

    $success = 1; 
    $db->autocommit(FALSE); 

    foreach($queries as $query) { 
     $result = $db->query($query); 
     echo $result; 
     if(!$result) { 
      $success = 0; 
      break; 
     } 
    } 

    if($success == 1) { 
     $db->commit(); 
    }else{ 
     $db->rollback(); 
    } 
    $db->autocommit(TRUE); 
    return $success; 
} 
+1

をコミットおよびロールバックできるようにするには、クエリを実行する前に、トランザクションを開始する必要があります – num8er

答えて

2

これを行う前にトランザクションを開始してください。

トランザクションを開始することをデータベースに伝える必要があるためです。

自動コミット(FALSE)後には、$db->begin_transaction();を入力する必要があります。

お読みくださいドキュメンテーション:mysqli::begin_transaction



P.S.エンジンがトランザクションをサポートしていないテーブルではできないことに注意してください。したがって、begin_transactionステートメントrollback()を追加しても機能しない場合は、テーブルエンジンでトランザクション対応のエンジンに設定されていることを確認してください。

mysqlの端子であなたのテーブルエンジンコールクエリを確認するには:

SHOW TABLE STATUS FROM database_name_goes_here; 

あなたが定義されたエンジンとデータベース内のテーブルのリストを取得します。

(取引を見つける:YES):mysqlの端末にクエリを呼び出すことによって、あなたが行うことができますトランザクションセーフエンジンのリストを取得するには

mysql> SHOW ENGINES\G 
*************************** 1. row *************************** 
     Engine: PERFORMANCE_SCHEMA 
    Support: YES 
    Comment: Performance Schema 
Transactions: NO 
      XA: NO 
    Savepoints: NO 
*************************** 2. row *************************** 
     Engine: InnoDB 
    Support: DEFAULT 
    Comment: Supports transactions, row-level locking, and foreign keys 
Transactions: YES 
      XA: YES 
    Savepoints: YES 
*************************** 3. row *************************** 
     Engine: MRG_MYISAM 
    Support: YES 
    Comment: Collection of identical MyISAM tables 
Transactions: NO 
      XA: NO 
    Savepoints: NO 
*************************** 4. row *************************** 
     Engine: BLACKHOLE 
    Support: YES 
    Comment: /dev/null storage engine (anything you write to it disappears) 
Transactions: NO 
      XA: NO 
    Savepoints: NO 
*************************** 5. row *************************** 
     Engine: MyISAM 
    Support: YES 
    Comment: MyISAM storage engine 
Transactions: NO 
      XA: NO 
    Savepoints: NO 
... 
+0

完璧、援助ありがとう! – DugoutSoccer

+0

ようこそ(: – num8er

関連する問題