ホームページ > バックエンド開発 > PHPチュートリアル > mysqli トランザクションの実行に関する問題

mysqli トランザクションの実行に関する問題

WBOY
リリース: 2016-06-23 14:20:45
オリジナル
998 人が閲覧しました

	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();	}
ログイン後にコピー

$arr_sql はデータベースコードを格納する配列です
テストしたとき、最初の文は正しく、2 番目の文は間違っていましたが、実行すると、最初の文は常に正常に実行されました。 。
トランザクションが役に立たないようです。PHP は初めてです。アドバイスをお願いします


ディスカッション (解決策) に返信します

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();	}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これはまだ問題です。たとえば、2つのSQLを変更した後、sql1は正しく、sql2は間違っています。このメソッドを実行した後も、sql1のデータはデータベースに正しく挿入されます。

ただし、sql1 が間違っている場合、sql2 が正しい場合、この 2 つは正常に挿入できません。これは実際には Break の機能ですが、トランザクションを開始するステートメントが反映されていません。 。
$con->begin_transaction();



$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();	}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

これはまだ問題です。たとえば、2つのSQLを変更した後、sql1は正しく、sql2は間違っています。このメソッドを実行した後も、sql1のデータはデータベースに正しく挿入されます。

ただし、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 ではないと思われます


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

これは何ですか? コード内でこのメソッドを呼び出すと、未定義であることが表示されます

テーブルのエンジンを確認してください。INNODB ではないと思われます


データベースのエンジンは INNODB であると確信していますが、エンジンを確認するにはどうすればよいですかテーブルの~?


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

これは何ですか? コード内でこのメソッドを呼び出すと、未定義であることが表示されます

テーブルのエンジンを見てください。INNODB ではないと思われます

完了しましたが、テーブルのエンジンは変更されていません

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート