ホームページ >バックエンド開発 >PHPチュートリアル >phpトランザクションの実装方法の紹介(コード例)

phpトランザクションの実装方法の紹介(コード例)

不言
不言転載
2019-02-20 11:33:102945ブラウズ

この記事では、PHPトランザクションの実装方法(コード例)を紹介していますので、参考になると思いますので、困っている方は参考にしていただければ幸いです。

<?php
$db = new mysqli("localhost","root","","test"); //连接数据库
$db->autocommit(false); //设置为非自动提交——事务处理
$sql1  = "INSERT INTO `test`.`test1` (`name` )VALUES (&#39;1&#39; )";
$result1 = $db->query($sql1);
$sql2  = "INSERT INTO `test`.`test2` (`a` )VALUES (&#39;1&#39;)";
$result2 = $db->query($sql2);
if ($result1 && $result2) {
$db->commit();  //全部成功,提交执行结果
echo &#39;提交&#39;;
} else {
$db->rollback(); //有任何错误发生,回滚并取消执行结果
echo &#39;回滚&#39;;
}
$db->autocommit(true); //设置为非自动提交——事务处理
$db->close();
?>

MYSQL にはトランザクション処理の主な方法が 2 つあります。

1. begin、rollback、commit を使用して実装します
トランザクションの開始を開始します
ロールバック トランザクションのロールバック
コミット トランザクションの確認
2 mysql
MYSQL の自動送信モードを変更するには、set を直接使用します。デフォルトでは、MYSQL は自動的に送信されます。つまり、クエリを送信すると、直接実行されます。
set autocommit=0 で自動送信を無効にし、
set autocommit=1 で自動送信を有効にすることでトランザクション処理を実装できます。
set autocommit=0 を使用すると、コミットまたはロールバックで確認するまで、後続のすべての SQL がトランザクションとして処理されます。
このトランザクションを終了すると、新しいトランザクションも開始されることに注意してください。最初の方法によれば、現在のものだけがトランザクションとして使用されます。
個人的には最初の方法を使用することをお勧めします。
MYSQL の INNODB および BDB タイプのデータ テーブルのみがトランザクション処理をサポートできます。他のタイプはサポートされていません。
***: 通常、MYSQL データベースのデフォルト エンジンは MyISAM ですが、このエンジンはトランザクションをサポートしていません。 MYSQL でトランザクションをサポートしたい場合は、自分で手動で変更できます:
方法は次のとおりです:

1. c:\appserv\mysql\my.ini ファイルを変更し、skip-InnoDB を見つけます。 、先頭に # を追加して、ファイルを保存します。

2. 操作中に「services.msc」と入力して、mysql サービスを再起動します。
3. phpmyadmin、mysql->show Engines; に移動し (または mysql->show 変数 ('have_%'; など) を実行)、InnoDB が YES (データベースが InnoDB をサポートしていることを意味します) であることを確認します。
これは、トランザクション トランザクションがサポートされていることを意味します。
4. テーブルを作成するときに、ストレージ エンジンとして InnoDB エンジンを選択できます。以前に作成したテーブルの場合は、mysql->alter table table_name type=InnoDB;
または mysql->alter table table_name Engine=InnoDB; を使用して、トランザクションをサポートするようにデータ テーブルのエンジンを変更できます。
*/

/*************** transaction--1 ***************/
$conn = mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;) or die ("数据连接错误!!!");
mysql_select_db(&#39;test&#39;,$conn);
mysql_query("set names &#39;GBK&#39;"); //使用GBK中文编码;
//开始一个事务
mysql_query("BEGIN"); //或者mysql_query("START TRANSACTION");
$sql = "INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, &#39;test1&#39;, &#39;0&#39;)";
$sql2 = "INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, &#39;test1&#39;, &#39;0&#39;)";//这条我故意写错
$res = mysql_query($sql);
$res1 = mysql_query($sql2); 
if($res && $res1){
mysql_query("COMMIT");
echo &#39;提交成功。&#39;;
}else{
mysql_query("ROLLBACK");
echo &#39;数据回滚。&#39;;
}
mysql_query("END");
rreerree


以上がphpトランザクションの実装方法の紹介(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。