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