Ein einfaches PDO-Klassenpaket. . Nur zum Lernen und zur Kommunikation
PdoDb-Datenbankkurs
<?php /** * @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)); } }