간단한 PDO 클래스 패키지입니다. . 학습과 소통을 위해서만
PdoDb 데이터베이스 클래스
- /**
- * @throws 오류
- * PDO 데이터베이스
- */
- PdoDb 클래스는 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
- */
- 공개 함수 __construct($config)
- {
- $this->Config = $config;
- }
-
- /**
- * 데이터베이스에 연결
- * @return void
- */
- 공개 함수 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
- */
- 공용 함수 disConnect()
- {
- $this->DB = null;
- $this->Stmt = null;
- }
-
- /**
- * sql을 실행하고 새로 추가된 id를 반환
- * @param string $statement
- * @return string
- */
- 공개 함수 exec($statement)
- {
- if ($this->DB->exec($statement)) {
- $this->Sql = $statement;
- return $this->lastId();
- }
- $this->errorMessage();
- }
-
- /**
- * 查询sql
- * @param string $statement
- * @return PdoDb
- */
- 공개 함수 쿼리($statement)
- {
- $res = $this->DB->query($statement);
- if ($res) {
- $this->Stmt = $res;
- $this->Sql = $statement;
- return $this;
- }
- $this->errorMessage();
- }
-
- /**
- * 데이터를 한 번 직렬화
- * @return 혼합
- */
- 공개 함수 fetchOne()
- {
- return $this->Stmt->fetch();
- }
-
- /**
- * 모든 데이터 직렬화
- * @return 배열
- */
- 공용 함수 fetchAll()
- {
- return $this->Stmt->fetchAll();
- }
-
- /**
- * 마지막 추가 아이디
- * @return 문자열
- */
- 공개 함수 lastId()
- {
- return $this->DB->lastInsertId();
- }
-
- /**
- * 영향을 받은 행 수
- * @return int
- */
- 공개 함수affectRows()
- {
- return $this->Stmt->rowCount();
- }
-
- /**
- * 준비된 문장
- * @param string $statement
- * @return PdoDb
- */
- 공개 함수 prepare($statement)
- {
- $res = $this->DB->prepare($statement);
- if ($res) {
- $this->Stmt = $res;
- $this->Sql = $statement;
- return $this;
- }
- $this->errorMessage();
- }
-
- /**
- * 데이터 바인딩
- * @param array $array
- * @return PdoDb
- */
- 공용 함수 binArray ($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
- */
- 공용 함수 실행()
- {
- if ($this->Stmt->execute()) {
- return true;
- }
- $this->errorMessage();
- }
-
- /**
- * 거래 시작
- * @return bool
- */
- 공개 함수 startTransaction()
- {
- return $this->DB->beginTransaction();
- }
-
- /**
- * 트랜잭션 실행
- * @return bool
- */
- 공개 함수 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
- */
- 公用靜態函式實例($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(){*/
- public function getDriverVersion(){ $
- public function getDriverVersion(){ $
- public function getDriverVersion(){ $ name = $name. ->DB->getAttribute(PDO::ATTR_DRIVER_NAME);
- 返回數組($name=>$this->DB->getAttribute(PDO::ATTR_CLIENT_VERSION));
}
}
複製程式碼
使用的時候
PdoDb::instance($config);
| 複製程式碼