簡體   English   中英

如何使用MySQLi事務回滾和提交?

[英]How to Rollback and Commit using MySQLi Transactions?

我似乎在使用PHP7中的回滾功能時遇到麻煩。 這是我的代碼,但是如果我提供查詢並將錯誤輸入其中一個,它將不會回滾。 它仍然會提交已完成的所有內容。

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;
}

您必須先開始交易,然后再執行此操作。

因為您必須告知數據庫您將要開始事務。

您必須輸入: $db->begin_transaction(); 自動提交后(FALSE);

請閱讀文檔: mysqli :: begin_transaction



PS:請記住,使用引擎不支持事務的表無法完成此操作。 因此,如果在添加begin_transaction語句后rollback()不起作用,請檢查您的表引擎,將其設置為具有事務支持的引擎。

要在mysql終端中檢查您的表引擎調用查詢:

SHOW TABLE STATUS FROM database_name_goes_here;

您將在數據庫中獲得定義了引擎的表列表。

要獲取事務安全引擎列表,可以通過在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
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM