Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk memadam transaksi dalam php

Bagaimana untuk memadam transaksi dalam php

藏色散人
藏色散人asal
2022-11-22 09:19:291403semak imbas

Cara memadamkan transaksi PHP: 1. Gunakan kaedah "autocommit(false)" untuk mematikan penyerahan automatik pangkalan data 2. Apabila semua pernyataan operasi berjaya, serahkan kepada pangkalan data melalui "commit(); ". Jika operasi Jika gagal, gunakan kaedah "rollback()" untuk melancarkan semula pemadaman.

Bagaimana untuk memadam transaksi dalam php

Persekitaran pengendalian tutorial ini: sistem Windows 7, PHP versi 8.1, komputer Dell G3.

Bagaimana untuk memadamkan transaksi PHP?

urus niaga pemprosesan transaksi php

Transaksi MySQL digunakan terutamanya untuk memproses data dengan operasi yang besar dan kerumitan yang tinggi. Sebagai contoh, dalam sistem pengurusan kakitangan, jika anda memadam seseorang, anda perlu memadam maklumat asas orang itu, dan juga memadam maklumat yang berkaitan dengan orang itu, seperti peti mel, artikel, dll. Dengan cara ini, pangkalan data ini penyata operasi membentuk urus niaga.

Dalam MySQL, hanya pangkalan data atau jadual yang menggunakan enjin pangkalan data Innodb menyokong transaksi

Pemprosesan transaksi boleh digunakan untuk mengekalkan integriti pangkalan data dan memastikan kumpulan pernyataan SQL sama ada dilaksanakan atau Jangan laksanakan semua

Urus niaga digunakan untuk mengurus sisipan, kemas kini, memadam penyata

Secara umumnya, urus niaga mesti memenuhi 4 syarat (ACID): Atomicity (atomicity), Consistency (stability) ), Pengasingan, Ketahanan

1. Atomiti transaksi: satu set transaksi sama ada berjaya atau ditarik balik.

2. Kestabilan: Jika terdapat data yang menyalahi undang-undang (kekangan kunci asing dan seumpamanya), transaksi akan ditarik balik.

3. Pengasingan: urus niaga berjalan secara bebas. Jika hasil daripada satu transaksi menjejaskan transaksi lain, transaksi lain akan ditarik balik. 100% pengasingan transaksi memerlukan pengorbanan kelajuan.

4 Ketahanan: Setelah transaksi dilakukan, perubahannya kepada data dalam pangkalan data adalah kekal Walaupun pangkalan data gagal, ia tidak sepatutnya memberi kesan.

Jalankan program berikut

$mysqli = new mysqli('localhost','root','mayi1991','mysqldemo');
if($mysqli->connect_error){
    die('数据库连接错误'.$mysqli->connect_error);
}
$sql1 = "update account set balance = balance - 2 where id = 1";
//这里故意写错指令中的balance1属性
$sql2 = "update account set balance1 = balance + 2 where id = 2";        
$result1 = $mysqli->query($sql1);
$result2 = $mysqli->query($sql2);
if(!$result1 || !$result2){
    die('操作错误'.$mysqli->error);
}else{
    die('操作成功');
}
$mysqli->close();

Walaupun kod di atas melaporkan ralat, dalam pangkalan data, baki dengan id=1 telah ditukar; masalah ;

Kami mahu menukar pada masa yang sama Jika satu ralat berlaku, ia tidak akan berubah pada masa ini, kami memerlukan "kawalan transaksi" untuk memastikan "konsistensi";

<.>

Kaedah yang kita perlukan untuk menggunakan autocommit() commit(); lihat kod di bawah

$mysqli = new mysqli(&#39;localhost&#39;,&#39;root&#39;,&#39;mayi1991&#39;,&#39;mysqldemo&#39;);
if($mysqli->connect_error){
    die(&#39;数据库连接错误&#39;.$mysqli->connect_error);
}
//关闭数据库自动提交
$mysqli->autocommit(false);
$sql1 = "update account set balance = balance - 2 where id = 1";
//这里故意写错属性balance1
$sql2 = "update account set balance1 = balance + 2 where id = 2";
$result1 = $mysqli->query($sql1);
$result2 = $mysqli->query($sql2);
if(!$result1 || !$result2){
    die(&#39;操作错误&#39;.$mysqli->error);
    $mysqli->rollback();    //事务回退
}else{
    //操作全部正确后再提交
    $mysqli->commit();
}
$mysqli->close();
Mula-mula gunakan kaedah autocommit(false) untuk mematikan penyerahan automatik pangkalan data, dan maka apabila semua pernyataan operasi berjaya, commit( ) diserahkan kepada pangkalan data

Jika operasi gagal, kami menggunakan kaedah rollback() untuk melancarkan semula.

Pembelajaran yang disyorkan: "

Tutorial Video PHP"

Atas ialah kandungan terperinci Bagaimana untuk memadam transaksi dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn