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."<br>/"; $resulf=false; $con->rollback(); break; } } print_r($result); if($result){ $con->commit(); } else{ $con->rollback(); } $con->close(); }
MYSQL では INNODB および BDB タイプのデータ テーブルのみがトランザクション処理をサポートできます
INNODB と BDB のみMYSQL のデータ テーブルの型 トランザクション処理をサポートするために
mysql で show エンジンを実行し、InnoDB を調べた結果、トランザクションをサポートしていることがわかりました
#Engine、Support、Comment、Transactions、XA、Savepoints
'InnoDB'、'DEFAULT'、 'トランザクション、行レベルのロック、および外部キーをサポート'、'YES'、'YES'、'YES'
$result=true;
$resulf=false; 問題がわかりましたか?次の変数名は間違って書かれています
$result=true;
問題がわかりますか?下の変数名は間違って書かれていました
見つけました、私のせいです〜
$result=true;
問題がわかりますか?以下の変数名が間違っています
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."<br/>"; $result=false; break; } } if($result){ $con->commit(); } else{ $con->rollback(); } $con->close(); }
これはまだ問題です。たとえば、2つのSQLを変更した後、sql1は正しく、sql2は間違っています。このメソッドを実行した後も、sql1のデータはデータベースに正しく挿入されます。
ただし、sql1 が間違っていて、sql2 が正しければ、この 2 つは正常に挿入できません。これは実際には Break の機能ですが、トランザクションの機能は反映されません
$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."<br/>"; $result=false; break; } } if($result){ $con->commit(); } else{ $con->rollback(); } $con->close(); }
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."<br/>"; $result=false; break; } } if($result){ $con->commit(); } else{ $con->rollback(); } $con->close(); }
ただし、sql1 が間違っている場合、sql2 が正しい場合、この 2 つは正常に挿入できません。これは実際には Break の機能ですが、トランザクションを開始するステートメントが反映されていません。 。
$con->begin_transaction();
mysqli で begin_transaction() メソッドが見つかりませんでした。 。 。
http://www.php.net/manual/zh/mysqli.begin-transaction.php
これは何ですか?
http://www.php.net/manual/zh/mysqli.begin-transaction.php
これは何ですか?
これを見ました
(PHP 5 >= 5.5.0)
mysqli::begin_transaction -- mysqli_begin_transaction ? トランザクションを開始します
トランザクションを実行するには PHP バージョンが 5.5.0 以降でなければならないというのは本当ですか?
http://www.php.net/manual/zh/mysqli.begin-transaction.php
これは何ですか? コード内でこのメソッドを呼び出すと、未定義として表示されます
http://www.php.net/manual/zh/mysqli.begin-transaction.php
これは何ですか? コード内でこのメソッドを呼び出すと、未定義と表示されます
テーブルのエンジンを見てください。INNODB ではないと思われます
これは何ですか? コード内でこのメソッドを呼び出すと、未定義であることが表示されます
データベースのエンジンは INNODB であると確信していますが、エンジンを確認するにはどうすればよいですかテーブルの~?
これは何ですか? コード内でこのメソッドを呼び出すと、未定義であることが表示されます
テーブルのエンジンを見てください。INNODB ではないと思われます
完了しましたが、テーブルのエンジンは変更されていません