一个简单的PDO类封装。。仅供学习交流
PdoDb 数据库类
-
/**
- * @throws Error
- * PDO数据库
- */
-
- class PdoDb extends DatabaseAbstract
- {
- /**
- * PDO实例
- * @var PDO
- */
- protected $DB;
- /**
- * PDO准备语句
- * @var PDOStatement
- */
- protected $Stmt;
- /**
- * 最后的SQL语句
- * @var string
- */
- protected $Sql;
- /**
- * 配置信息 $config=array('dsn'=>xxx,'name'=>xxx,'password'=>xxx,'option'=>xxx)
- * @var array
- */
- protected $Config;
-
- /**
- * 构造函数
- * @param array $config
- */
- public function __construct($config)
- {
- $this->Config = $config;
- }
-
- /**
- * 连接数据库
- * @return void
- */
- public function connect()
- {
- $this->DB = new PDO($this->Config['dsn'], $this->Config['name'], $this->Config['password'], $this->Config['option']);
- //默认把结果序列化成stdClass
- $this->DB->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
- //自己写代码捕获Exception
- $this->DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
- }
-
- /**
- * 断开连接
- * @return void
- */
- public function disConnect()
- {
- $this->DB = null;
- $this->Stmt = null;
- }
-
- /**
- * 执行sql,返回新加入的id
- * @param string $statement
- * @return string
- */
- public function exec($statement)
- {
- if ($this->DB->exec($statement)) {
- $this->Sql = $statement;
- return $this->lastId();
- }
- $this->errorMessage();
- }
-
- /**
- * 查询sql
- * @param string $statement
- * @return PdoDb
- */
- public function query($statement)
- {
- $res = $this->DB->query($statement);
- if ($res) {
- $this->Stmt = $res;
- $this->Sql = $statement;
- return $this;
- }
- $this->errorMessage();
- }
-
- /**
- * 序列化一次数据
- * @return mixed
- */
- public function fetchOne()
- {
- return $this->Stmt->fetch();
- }
-
- /**
- * 序列化所有数据
- * @return array
- */
- public function fetchAll()
- {
- return $this->Stmt->fetchAll();
- }
-
- /**
- * 最后添加的id
- * @return string
- */
- public function lastId()
- {
- return $this->DB->lastInsertId();
- }
-
- /**
- * 影响的行数
- * @return int
- */
- public function affectRows()
- {
- return $this->Stmt->rowCount();
- }
-
- /**
- * 预备语句
- * @param string $statement
- * @return PdoDb
- */
- public function prepare($statement)
- {
- $res = $this->DB->prepare($statement);
- if ($res) {
- $this->Stmt = $res;
- $this->Sql = $statement;
- return $this;
- }
- $this->errorMessage();
- }
-
- /**
- * 绑定数据
- * @param array $array
- * @return PdoDb
- */
- public function bindArray($array)
- {
- foreach ($array as $k => $v) {
- if (is_array($v)) {
- //array的有效结构 array('value'=>xxx,'type'=>PDO::PARAM_XXX)
- $this->Stmt->bindValue($k + 1, $v['value'], $v['type']);
- } else {
- $this->Stmt->bindValue($k + 1, $v, PDO::PARAM_STR);
- }
- }
- return $this;
- }
-
- /**
- * 执行预备语句
- * @return bool
- */
- public function execute()
- {
- if ($this->Stmt->execute()) {
- return true;
- }
- $this->errorMessage();
- }
-
- /**
- * 开启事务
- * @return bool
- */
- public function beginTransaction()
- {
- return $this->DB->beginTransaction();
- }
-
- /**
- * 执行事务
- * @return bool
- */
- public function commitTransaction()
- {
- return $this->DB->commit();
- }
-
- /**
- * 回滚事务
- * @return bool
- */
- public function rollbackTransaction()
- {
- return $this->DB->rollBack();
- }
-
- /**
- * 抛出错误
- * @throws Error
- * @return void
- */
- public function errorMessage()
- {
- $msg = $this->DB->errorInfo();
- throw new Error('数据库错误:' . $msg[2]);
- }
-
- //---------------------
- /**
- * 单例实例
- * @var PdoDb
- */
- protected static $_instance;
-
- /**
- * 默认数据库
- * @static
- * @param array $config
- * @return PdoDb
- */
- public static function instance($config)
- {
- if (!self::$_instance instanceof PdoDb) {
- self::$_instance = new PdoDb($config);
- self::$_instance->connect();
- }
- return self::$_instance;
- }
-
- //----------------------
-
- /**
- * 获取PDO支持的数据库
- * @static
- * @return array
- */
- public static function getSupportDriver(){
- return PDO::getAvailableDrivers();
- }
- /**
- * 获取数据库的版本信息
- * @return array
- */
- public function getDriverVersion(){
- $name = $this->DB->getAttribute(PDO::ATTR_DRIVER_NAME);
- return array($name=>$this->DB->getAttribute(PDO::ATTR_CLIENT_VERSION));
- }
-
- }
复制代码
使用的时候
- PdoDb::instance($config);
复制代码
|