シンプルな PDO クラス パッケージ。 。学習とコミュニケーションのみを目的としています
PdoDb データベース クラス
- /**
- * @throws エラー
- * PDO データベース
- */
- class PdoDb extends DatabaseAbstract
- {
- /**
- * PDO インスタンス
- * @var PDO
- */
- protected $DB;
- /**
- * PDO 準備済みステートメント
- * @var PDOStatement
- */
- protected $Stmt;
- /**
- * 最後の SQL ステートメント
- * @var 文字列
- */
- 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();
- }
-
- /**
- * データを一度シリアル化します
- * @returnmixed
- */
- 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 functionaffectRows()
- {
- 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 bindingArray ($array)
- {
- foreach ($array as $k => $v) {
- if (is_array($v)) {
- //配列の有能な配列 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 functionexecute()
- {
- 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 エラー
- * @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 インスタンス($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);
复制代
|