model.class.php事务,Model.php

class Model extends PDO {

private static $_pdo; // PDO 对象

private static $_sth; // PDOStatement 对象

private static $_sql; // 最后一条SQL语句

/**

* 获取最后插入行的ID

*

* @param string $name 返回ID的序列对象的名称。

* @return integer

*/

public static function get_last_insert_id($name = NULL) {

if (! self::$_pdo) {

return false;

} else {

return self::$_pdo->lastInsertId ( $name );

}

}

/**

* 获取SQL语句影响行数

*

* @return integer

*/

public static function get_row_count() {

if (! self::$_pdo) {

return false;

} else {

return self::$_sth->rowCount ();

}

}

/**

* 获取最后一条执行的SQL语句

*

* @return array

*/

public static function get_last_sql() {

return self::$_sql;

}

/**

* 查询SQL语句

*

* @param string $sql sql语句

* @param array $params sql语句参数

* @param string $style 'array':输出数组,'class':输出class,'func':每行调用一次$funcName的函数, 并以每行的列做为函数参数

* @param string $funcName 函数名称, 当参数为类的方法时, funcName为 `class::method`

*/

public static function query($sql, $params = [], $style = 'array', $funcName = NULL) {

try {

self::execute ( $sql, $params );

switch ($style) {

case 'func' :

return self::$_sth->fetchAll ( PDO::FETCH_FUNC, $funcName );

break;

case 'class' :

return self::$_sth->fetchAll ( PDO::FETCH_CLASS );

break;

default :

return self::$_sth->fetchAll ( PDO::FETCH_ASSOC );

break;

}

} catch ( Exception $e ) {

self::error ( $e->getMessage () );

}

}

/**

* 执行SQL语句

*

* @param string $sql sql语句

* @param array $params sql语句参数

* @return Model

*/

public static function execute($sql, $params = []) {

try {

self::$_pdo = (! self::$_pdo) ? self::init () : self::$_pdo;

self::$_sth = self::$_pdo->prepare ( $sql );

/*

* 绑定参数

*/

if (is_array ( $params ) && ! empty ( $params )) {

foreach ( $params as $k => $v ) {

if (is_int ( $v )) {

$data_type = PDO::PARAM_INT;

} elseif (is_bool ( $v )) {

$data_type = PDO::PARAM_BOOL;

} elseif (is_null ( $v )) {

$data_type = PDO::PARAM_NULL;

} else {

$data_type = PDO::PARAM_STR;

}

self::$_sth->bindParam ( $k, $v, $data_type );

}

}

self::$_sth->execute ();

/*

* 记录SQL语句

*/

self::$_sql ['template'] = $sql;

self::$_sql ['params'] = $params;

if (empty ( $params )) {

self::$_sql ['sql'] = $sql;

} else {

self::$_sql ['sql'] = str_replace ( array_keys ( $params ), array_values ( $params ), $sql );

}

return new self ();

} catch ( Exception $e ) {

self::error ( $e->getMessage () );

}

}

/**

* 提交事务

*/

public static function commit() {

self::$_pdo->commit ();

}

/**

* 开启事务处理

*/

public static function beginTransaction() {

self::$_pdo->beginTransaction ();

}

/**

* 回滚

*/

public static function rollBack() {

self::$_pdo->rollBack ();

}

/**

* 显示错误信息

*

* @param string/array $message 提示信息内容

*/

public static function error($message) {

if (is_array ( $message )) {

$message = "

" . print_r ( $message, true ) . "
";

}

$html = "

Error Message
Error Message
{$message}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值