How to use transactions to handle transfer problems in php Mysqli_PHP Tutorial

WBOY
Release: 2016-07-13 09:56:18
Original
916 people have browsed it

php Mysqli uses transactions to handle transfer issues

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

 ?

1

2

3

4

5

6

7

8

9

10

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

header("Content-type:text/html; charset=utf-8");

$mysqli = new mysqli("localhost", "root", "064319", "php");

$mysqli->set_charset("utf8");

 

if($mysqli->connect_errno) {

die('数据库连接失败'.$mysqli->connect_error);

}

 

$mysqli->autocommit(false); //自动提交模式设为false

$flag = true; //事务是否成功执行的标志

 

$query = "update account set balance=balance-1000 where id=3";

$result = $mysqli->query($query);

$affected_count = $mysqli->affected_rows;

if(!result || $affected_count == 0) { //失败

$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 '转账成功';

} else {

$mysqli->rollback();

echo '转账失败';

}

 

$mysqli->autocommit(true); //重新设置事务为自动提交

$mysqli->close();

?>

1 2 3 4 5 6 7 8 9 10 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
<🎜>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:

 ?

1

2

3

4

5

6

7

8

9

10

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);//设置异常处理模式

$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);//关闭自动提交

}catch(PDOException $e){

echo "数据库连接失败";

exit;

}

 

try{

$age=10;

$pdo->beginTransaction();//开始事务

$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'");//随意更改使之执行成功或失败

/* if($affected_rows1&&$affected_rows2)

{

$pdo->commit();

echo "操作成功";

}else{

$pdo->rollback();

} */

if(!$affected_rows1)

throw new PDOException("加入错误");

if(!$affected_rows2)

throw new PDOException("减少错误");

echo "操作成功";

$pdo->commit();//如果执行到此处前面两个更新sql语句执行成功,整个事务执行成功

}catch(PDOException $e){

echo "操作失败:".$e->getMessage();

$pdo->rollback();//执行事务中的语句出了问题,整个事务全部撤销

}

$pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,1);

//测试是否成功

echo "n操作结果为:n";

$sql="select * from kfry";

$result=$pdo->query($sql);

foreach($result as $v)

{

echo $v['k_name']." ".$v['k_age']."n";

}

?>

1

2 3

45 6 7 8 9 10
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"; } ?>
The above is the entire content of this article, I hope you all like it. http://www.bkjia.com/PHPjc/988369.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/988369.htmlTechArticlephp Mysqli uses transactions to handle transfer problems. php Mysqli uses transactions to handle transfer problems. This article describes php Mysqli with examples. Use transactions to handle transfer problems. Share to...
Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template