php事务讲解,PHP面向对象之事务脚本模式(详解)
/*
事务脚本模式: 类似于thinkphp中的model层,或者说就是操作数据库的类。
个人觉得实践中使用起来还是挺简单方便的,就是SQL语句写死了的话,灵活性就不够。
示例代码如下:
*/
namespace woo\process;
abstract class Base{
static $DB; //pdo对象
static $stmts = array(); //sql语句句柄
function __construct (){
$dsn = \woo\base\ApplicationRegistry::getDSN();
if(is_null($dsn)){
throw new \woo\base\AppException("No DSN");
}
self::$DB = new PDO($dsn);
self::$DB->setAttribute(\PDO::ATTR_ERRMODE,\PDO::ERRMODE_EXCEPTION);
}
function prepareStatement($stmt_s){ //缓存sql语句句柄
if(isset(self::$stmts($stmt_s)){
return self::$stmts[$stmt_s];
}
$stmt_handle = self::$DB->prepare($stmt_s);
self::$stmts[$stmt_s] = $stmt_handle;
return $stmt_handle;
}
protected function doStatement($stmt_s,$values_a){ //执行sql并获取一个语句资源
$sth = $this->prepareStatement($stmt_s);
$sth->closeCursor();
$db_result = $sth->execute($values_a);
return $sth;
}
}
//这个类就是向数据库中写入一些数据,比较简单没什么好多说的
class VenueManager extends Base{
static $add_venue = "INSERT INTO venue (name) values(?)";
static $add_space = "INSERT INTO space (name,venue) values(?,?)";
static $check_slot = "SELECT id,name FROM event WHERE space = ? AND (start+duration)>? AND start ";
static $add_event = "INSERT INTO event (name,space,start,duration) values(?,?,?,?)";
function addVenue($name,$space_array){
$ret = array();
$ret['venue'] = array($name);
$this->doStatement(self::$add_venue,$ret['venue']);
$v_id = self::$DB->lastInsertId();
$ret['spaces'] = array();
foreach($space_array as $space_name){
$values = array($space_name,$v_id);
$this->doStatement(self::$add_space,$values);
$s_id = self::$DB->lastInsertId();
array_unshift($values,$s_id);
$ret['spaces'][] = $values;
}
return $ret;
}
function bookEvent ($space_id,$name,$time,$duration){
$values = array($space_id,$time,($time+$duration));
$stmt = $this->doStatement(self::$check_slot,$values,false);
if($result = $stmt->fetch()){
throw new \woo\base\AppException("double booked! try again");
}
$this->doStatement(self::$add_event,array($name,$space_id,$time,$duration));
}
}
//客户端,使用起来还是比较简便的
$venue = new VenueManager();
$venue->addVenue('test',array('test1','test2','test3'));
php事务讲解,PHP面向对象之事务脚本模式(详解)相关推荐
- php事务 面向对象,PHP面向对象之事务脚本模式(详解)
如下所示: /* 事务脚本模式: 类似于thinkphp中的model层,或者说就是操作数据库的类. 个人觉得实践中使用起来还是挺简单方便的,就是SQL语句写死了的话,灵活性就不够. 示例代码如下: ...
- 【elasticsearch】Elasticsearch 7.X Scripting 脚本使用详解
1.概述 转载:Elasticsearch 7.X Scripting脚本使用详解 0.题记 除了官方文档,其他能找到的介绍Elasticsearch脚本(Scripting)的资料少之又少. 一方面 ...
- Scala进阶之路-面向对象编程之类的成员详解
Scala进阶之路-面向对象编程之类的成员详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Scala中的object对象及apply方法 1>.scala 单例对象 ...
- fofa自动化爬虫脚本更新+详解
fofa自动化爬虫脚本更新+详解 起因 最近要用到fofa爬虫,为什么要用爬虫不用api,问就是穷,想起来之前写过一个相关的脚本:Fofa-python-脚本,是很久以前写的了,之前写的时候有点问题, ...
- rcs开机启动mysql_linux添加开机自启动脚本示例详解-阿里云开发者社区
linux添加开机自启动脚本示例详解 double2li 2017-04-14 1652浏览量 简介: linux下(以RedHat为范本)添加开机自启动脚本有两种方法,先来简单的;一.在/etc/r ...
- python的类和对象_Python面向对象之类和对象实例详解
本文实例讲述了Python面向对象之类和对象.分享给大家供大家参考,具体如下: 类和对象(1) 对象是什么? 对象=属性(静态)+方法(动态): 属性一般是一个个变量:方法是一个个函数: #类的属性 ...
- java dtu 采集程序_DTU脚本编程_本地采集脚本指令详解
前言: 通过配置DTU的脚本指令实现DTU定时自动采集,用户只需知道外接仪表.无需再单独增加控制器传感器的采集流程,然后通过编写脚本指令即可让DTU按照用户的流程自动采集.上传数据.脚本实现了基本的开 ...
- 分布式事务(Seata) 四大模式详解
前言 在上一节中我们讲解了,关于分布式事务和seata的基本介绍和使用,感兴趣的小伙伴可以回顾一下<别再说你不知道分布式事务了!> 最后小农也说了,下期会带给大家关于Seata中关于sea ...
- 什么是分布式事务Seata?Seata的几种事务模式详解
最后更新于:2020-04-08 17:37 目录 概念 发展历程 核心组件 三种事务模式 AT模式 前提 一个分布式事务在Seata中的执行流程 Seata 的事务提交方式与 XA 协议的两段式提交 ...
最新文章
- CSP 2019-09-1 小明种苹果 Python实现+详解
- 电商那些年,我摸爬打滚出的高并发架构实战精髓
- 执行COUNT(1)、COUNT(*) 与 COUNT(列名) 到底有什么区别?
- 程序幽默:会让程序员争论起来的几个话题
- maven(6)仓库
- “电脑人才”是怎么炼成的
- 克隆git文件_如何在Git中克隆,修改,添加和删除文件
- Kafka : kafka无法消费的情况
- typora代码块语言linux命令,typora工具的使用以及MarkDown语法
- 博弈——无向图删边游戏
- 泛型与容器连载(一)泛型的基本概念和原理
- 了解为什么要使用微服务!
- 蕊动矿机linux cpu超频,蚂蚁l3矿机超频方法!最佳超频参数! | 呆毛网
- Linux系统上QQ闪退的问题
- 大厂团队协作工具推荐
- 5款知名bug管理工具
- CentOS7防火墙关闭
- 点击按钮复制文本框内容
- webpack中的style-resources-loader加载全局css变量
- 2022年中职——网络搭建国赛windows脚本写法(正式题详细解析)