| 如下所示:*/ namespace wooprocess; abstract class Base{static $DB;         //pdo对象
 static $stmts = array(); //sql语句句柄
 function __construct (){$dsn = woobaseApplicationRegistry::getDSN();
 if(is_null($dsn)){
 throw new woobaseAppException("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+$duration));
 $stmt = $this->doStatement(self::$check_slot,$values,false);
 if($result = $stmt->fetch()){
 throw new woobaseAppException("double booked! try again");
 }
 $this->doStatement(self::$add_event,array($name,$space_id,$duration));
 }
 }
 //客户端,使用起来还是比较简便的$venue = new VenueManager();
 $venue->addVenue('test',array('test1','test2','test3'));
 以上这篇PHP面向对象之事务脚本模式(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。 (编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |