php利用事务处理转账问题_php实例

本文实例讲述了php+Mysqli利用事务处理转账问题的方法。分享给大家供大家参考

<?php
 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();
?>

代码二:

<?php
 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";
 }
?>

以上所述就是本文的全部内容了,希望大家能够喜欢。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php
, 事务处理
转账
mysql事务处理实例、oracle 事务处理 实例、sql事务实例、java 分布式事务 实例、jta分布式事务 实例,以便于您获取更多的相关知识。

时间: 2024-12-21 13:32:38

php利用事务处理转账问题_php实例的相关文章

php+Mysqli利用事务处理转账问题实例_php技巧

本文实例讲述了php+Mysqli利用事务处理转账问题的方法.分享给大家供大家参考.具体实现方法如下: <?php header("Content-type:text/html; charset=utf-8"); $mysqli = new mysqli("localhost", "root", "064319", "php"); $mysqli->set_charset("utf8&

php+Mysqli利用事务处理转账问题实例

 这篇文章主要介绍了php+Mysqli利用事务处理转账问题的方法,实例分析了php+mysqli处理事务的提交与回滚的技巧,需要的朋友可以参考下     本文实例讲述了php+Mysqli利用事务处理转账问题的方法.分享给大家供大家参考.具体实现方法如下: ? 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 <?php header(

php+Mysqli利用事务处理转账问题的方法

  php+Mysqli利用事务处理转账问题的方法        本文实例讲述了php+Mysqli利用事务处理转账问题的方法.分享给大家供大家参考 ? 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 <?php header("Content-type:text/html; charset=utf-8");   $my

ThinkPHP框架任意代码执行漏洞的利用及其修复方法_php实例

ThinkPHP是国内著名的开源的PHP框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的.最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布.早期的思想架构来源于Struts,后来经过不断改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结 构和MVC模式,融合了Struts的Action和Dao思想和JSP的TagLib(标签库).RoR的ORM映射和ActiveRecord模式, 封装了CURD和一些常

Windows7下PHP开发环境安装配置图文方法_php实例

      操作系统:Windows 7 Ultimate       WEB服务器:IIS 6.1(内部版本7600).       数据库:MySql5.0.67       PHP版本:5.2.13       我还担心Win7下可能会不兼容,结果是一点问题都没有.    一.安装MySql数据库       MySql数据库在这里下载:http://www.mysql.com/downloads/ 客户端工具Navicat(导航猫)在这里下载:http://www.navicat.com

php开发留言板的CRUD(增,删,改,查)操作_php实例

项目结构: 开发留言板的CRUD(增,删,改,查)操作_php实例-angularjs crud实例"> 添加页面:                                说明:这里只注重操作,对界面的美工没有下工夫,希望大家理解...... 列表页面: 修改页面: 项目中所需的sql: 复制代码 代码如下: create database form; use form; CREATE TABLE `message` ( `id` tinyint(1) NOT NULL auto_

php开发文档 会员收费1期_php实例

介绍 最新项目--会员收费,目的是要以更好的展现形式表现给用户,以及添加了新功能(会员机制). 索引 流程图 1> 展示界面 2> 获取折扣价格 接口说明 http请求脚本(curl或socket) 测试数据 流程图 其中里面的demo:是通过url进行展现,里面的mst是参数,通过不同的参数进行展现.如:http://www.demo.com/?mst=1表示参数为1的demo样式. 展示界面(4种情况)开发文档 会员收费1期_php实例-软件开发设计文档实例">获取折扣价格

利用Oracle数据库发送邮件的实例代码_oracle

--发送邮件的主过程如下所述: Procedure send_mail_ (p_From Varchar2, --邮件发送人 p_Fromuser Varchar2, --发件人昵称 p_Touser Varchar2, --接受人昵称 p_To Varchar2, --邮件接收人 p_Cc Varchar2, --邮件抄送人 p_Subject Varchar2, --邮件标题 p_Message Varchar2, --邮件内容 p_User Varchar2, --邮件验证用户 p_Mai

PHP利用imagick生成组合缩略图_php实例

先给大家炫下效果图,如果大家觉得还很满意,请继续往下阅读: 这里说的imagick 是 ImageMagick 在PHP下的扩展.使用pecl安装起来那叫一个轻松简单一条命令就搞定: 复制代码 代码如下: sudo pecl install imagick (扩展装好后还是要在php.ini中加上extension=imagick.so,然后记得重启apache或php-fpm服务.) 最近有个需求是要把多张图片组合起来生成缩略图,刚好用用这个强大的imagick扩展. 这个需求是要这样生成缩略