程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> mysqli執行mysql事務的問題

mysqli執行mysql事務的問題

編輯:關於MYSQL數據庫

       public static function exec_sql_tran($arr_sql){

      $result=true;

      $con = new MySQLi(DBHOST,DB_USER,DB_PASSWD,DB_NAME);

      $con->autocommit(FALSE);

      foreach($arr_sql as $key=>$sql){

      if (!$con->query($sql)) {

      echo $con->error."

      /";

      $resulf=false;

      $con->rollback();

      break;

      }

      }

      print_r($result);

      if($result){

      $con->commit();

      }

      else{

      $con->rollback();

      }

      $con->close();

      }

      $arr_sql是一個存儲數據庫代碼的數組

      我測試的時候寫了兩個insert的句子,第一個句子正確,第二個句子錯誤,當時執行下來總是發現第一個句子執行成功。

      好像事務沒用一樣,php新手,求教了

      MYSQL中只有INNODB和BDB類型的數據表才能支持事務處理

      我在mysql裡面執行 show engines,看InnoDB,結果顯示是支持事務的

      # Engine, Support, Comment, Transactions, XA, Savepoints

      ‘InnoDB’, ’DEFAULT’, ’Supports transactions, row-level locking, and foreign keys’, ’YES’, ’YES’, ’YES’

      $result=true;

      $resulf=false;

      看出問題了麼?下面的變量名寫錯了

      發現了,罪過罪過~

      public static function exec_sql_tran($arr_sql){

      $result=true;

      $con = new MySQLi(DBHOST,DB_USER,DB_PASSWD,DB_NAME);

      $con->autocommit(false);

      foreach($arr_sql as $key=>$sql){

      if (!$con->query($sql)) {

      echo $con->error."

      ";

      $result=false;

      break;

      }

      }

      if($result){

      $con->commit();

      }

      else{

      $con->rollback();

      }

      $con->close();

      }

      還是問題,我改了代碼之後,比如兩個sql,sql1正確、sql2錯誤,用這個方法執行下來,sql1的數據還是正確插入數據庫了

      但是如果sql1錯、sql2正確的話,兩個就不能插入成功,這個其實是break的作用,但是事務的作用沒有體現出來啊

      public static function exec_sql_tran($arr_sql){

      $result=true;

      $con = new MySQLi(DBHOST,DB_USER,DB_PASSWD,DB_NAME);

      $con->autocommit(false);

      foreach($arr_sql as $key=>$sql){

      if (!$con->query($sql)) {

      echo $con->error."

      ";

      $result=false;

      break;

      }

      }

      if($result){

      $con->commit();

      }

      else{

      $con->rollback();

      }

      $con->close();

      }

      還是問題,我改了代碼之後,比如兩個sql,sql1正確、sql2錯誤,用這個方法執行下來,sql1的數據還是正確插入數據庫了

      但是如果sql1錯、sql2正確的話,兩個就不能插入成功,這個其實是break的作用,但是事務的作用沒有體現出來啊

      沒看到事務開始的語句。

      $con->begin_transaction();

      public static function exec_sql_tran($arr_sql){

      $result=true;

      $con = new MySQLi(DBHOST,DB_USER,DB_PASSWD,DB_NAME);

      $con->autocommit(false);

      foreach($arr_sql as $key=>$sql){

      if (!$con->query($sql)) {

      echo $con->error."

      ";

      $result=false;

      break;

      }

      }

      if($result){

      $con->commit();

      }

      else{

      $con->rollback();

      }

      $con->close();

      }

      還是問題,我改了代碼之後,比如兩個sql,sql1正確、sql2錯誤,用這個方法執行下來,sql1的數據還是正確插入數據庫了

      但是如果sql1錯、sql2正確的話,兩個就不能插入成功,這個其實是break的作用,但是事務的作用沒有體現出來啊

      沒看到事務開始的語句。

      $con->begin_transaction();

      mysqli裡面我沒有找到begin_transaction()這個方法。。。

      http://www.php.net/manual/zh/mysqli.begin-transaction.php

      這個是什麼?

      這個我看到了

      (PHP 5 >= 5.5.0)

      mysqli::begin_transaction – mysqli_begin_transaction — Starts a transaction

      是不是php版本要大於5.5.0才有事務的?

      http://www.php.net/manual/zh/mysqli.begin-transaction.php

      這個是什麼?

      我在代碼裡面調用這個方法是顯示未定義的

      看看表的引擎吧,我懷疑不是INNODB的

      看看表的引擎吧,我懷疑不是INNODB的

      我確定數據庫的引擎是INNODB,表的怎麼看~?

      看看表的引擎吧,我懷疑不是INNODB的

      搞定了,就是表的引擎沒有變過來

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved