Home > Backend Development > PHP Tutorial > What does transaction script mode mean?

What does transaction script mode mean?

零下一度
Release: 2023-03-10 16:48:01
Original
2065 people have browsed it
/*事务脚本模式: 类似于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[&#39;venue&#39;] = 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'));
Copy after login

 

The above is the detailed content of What does transaction script mode mean?. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
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