PDO 작업 데이터베이스 캡슐화
1. PDO 작업 데이터베이스를 캡슐화하기 위해 MysqlPdo.class.php 파일을 생성합니다.
구체적인 코드는 다음과 같습니다.
<?php class MysqlPdo{ private $dbConfig=array( 'db'=>'mysql', 'host'=>'localhost', 'port'=>'3306', 'user'=>'root', 'pwd'=>'', 'charset'=>'utf8', 'dbname'=>'' ); private static $instance; //单例模式 private $db; //PDO实例 private $data=array(); //操作数据 private function __construct($params) { $this->dbConfig=array_merge($this->dbConfig,$params); $this->connect(); } //连接服务器 private function connect(){ //mysql:host=localhost //mysql:host:localhost;port=3306;dbname=php;charset=utf-8 $dsn="{$this->dbConfig['db']}:host={$this->dbConfig['host']};port={$this->dbConfig['port']};dbname={$this->dbConfig['dbname']};charset={$this->dbConfig['charset']}}"; try{ //实例化PDO $this->db=new PDO($dsn,$this->dbConfig['user'],$this->dbConfig['pwd']); }catch (PDOException $exception){ die("数据库连接失败"); } } public static function getInstance($params=array()){ if(!self::$instance instanceof self){ self::$instance=new self($params); } return self::$instance; //返回对象 } //私有化克隆,防止外部调用clone $对象 生成新的对象,因为是单例模式 private function __clone() { // TODO: Implement __clone() method. } //通过预处理方式执行sql public function query($sql,$batch=false){ $data=$batch?$this->data:array($this->data); $this->data=array(); //通过预处理方式执行SQL $stmt=$this->db->prepare($sql); foreach($data as $v){ if($stmt->execute($v)===false){ die("数据库PDO预处理操作失败"); } } return $stmt; } public function data($data){ $this->data=$data; return $this; //返回对象自身用于连贯操作 } //取得一行结果 public function fetchRow($sql){ return $this->query($sql)->fetch(PDO::FETCH_ASSOC);//返回索引数组 } //取得多行结果 public function fetchAll($sql){ return $this->query($sql)->fetchAll(PDO::FETCH_ASSOC); } }
1 이 캡슐화 클래스는 싱글톤 모드를 채택하고 구성 방법을 사유화합니다. 복제 방법을 사용하면 인스턴스화된 개체가 하나만 있을 수 있으므로 데이터베이스 연결 리소스가 절약됩니다.
2. GetInstance()는 데이터베이스 연결 개체가 생성될 때마다 호출되어야 합니다. getInstance에 데이터베이스 구성 정보를 전달합니다. 객체를 인스턴스화할 때 생성자가 자동으로 호출되어 들어오는 데이터베이스 구성 정보를 원래 정보와 병합하므로 다른 데이터베이스에 대한 연결 확장이 용이해집니다. 데이터베이스를 변경하려면 구성 정보만 변경하면 됩니다
3, 전처리를 통해 SQL 문 실행
4, 일관된 작업 사용
5, 쿼리 결과 집합 처리
이것이 데이터베이스 클래스의 캡슐화입니다