Home >Backend Development >PHP Tutorial >How to use transactions to handle transfer problems in php Mysqli_PHP Tutorial
php Mysqli uses transactions to handle transfer issues
The example in this article describes how php Mysqli uses transactions to handle transfer issues. Share it with everyone for your reference
?
|
<🎜>header("Content-type:text/html; charset=utf-8");<🎜> <🎜> <🎜> <🎜>$mysqli = new mysqli("localhost", "root", "064319", "php");<🎜> <🎜>$mysqli->set_charset("utf8"); if($mysqli->connect_errno) { die('Database connection failed'.$mysqli->connect_error); } $mysqli->autocommit(false); //Set the automatic commit mode to false $flag = true; //Flag indicating whether the transaction was successfully executed $query = "update account set balance=balance-1000 where id=3"; $result = $mysqli->query($query); $affected_count = $mysqli->affected_rows; if(!result || $affected_count == 0) { //Failed $flag = false; } $query = "update account set balance=balance 1000 where id=2"; $result = $mysqli->query($query); $affected_count = $mysqli->affected_rows; if(!$result || $affected_count == 0) { $flag = false; } if($flag) { $mysqli->commit(); echo 'Transfer successful'; } else { $mysqli->rollback(); echo 'Transfer failed'; } $mysqli->autocommit(true); //Reset the transaction to automatically commit $mysqli->close(); ?> |
Code 2:
?
2 3 11 12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<🎜>try{<🎜> <🎜>$pdo=new PDO("mysql:host=localhost;dbname=psp","root","");<🎜> <🎜>$pdo->exec("set names utf8"); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//Set exception handling mode $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);//Turn off automatic submission }catch(PDOException $e){ echo "Database connection failed"; exit; } try{ $age=10; $pdo->beginTransaction();//Start transaction $affected_rows1=$pdo->exec("update kfry set k_age=k_age {$age} where k_name='user1'"); $affected_rows2=$pdo->exec("update kfry set k_age=k_age-{$age} where k_name='user2'");//Change at will to make the execution successful or failed /* if($affected_rows1&&$affected_rows2) { $pdo->commit(); echo "Operation successful"; }else{ $pdo->rollback(); } */ if(!$affected_rows1) throw new PDOException("Add error"); if(!$affected_rows2) throw new PDOException("Reduce errors"); echo "Operation successful"; $pdo->commit();//If the first two update sql statements are executed successfully at this point, the entire transaction is executed successfully }catch(PDOException $e){ echo "Operation failed:".$e->getMessage(); $pdo->rollback();//There is a problem with the statement in the execution transaction, and the entire transaction is canceled } $pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1); //Whether the test was successful echo "n operation result is: n"; $sql="select * from kfry"; $result=$pdo->query($sql); foreach($result as $v) { echo $v['k_name']." ".$v['k_age']."n"; } ?> |