mysqli執行mysql事務的問題

來源:互聯網
上載者:User

   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的

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

相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。