<?php include"config.php"; //定义一个接口 interface DbMysql{ public function table($tableName); //增加 arr为传入的数组 public function insert($arr); //修改 public function up($table,$arr,$where=1); //删除 public function delete($table,$where=1); //执行sql语句 public function query($sql); //获取一个字段 public function getOne($name,$table,$where=1); //获取所有数据 public function getAll($sql); //获取新增id public function getLastInsertId(); //获取单条数据 public function Row($sql); //查询的方法 public function select($columns, $join = null, $where = null, $group = null, $having = null, $order = null, $limit = null); } //工厂方法 interface Factory{ function createDB(); } //实现接口 class mysqldb implements DbMysql{ // 表名 protected $table; // 数据库对象 protected $pdo; protected $host; protected $user; protected $pwd; protected $db; protected $type; //私有的静态属性 private static $dbcont=false; //私有的构造方法 private function __construct(){ global $library; $this->host=$library['host']; $this->user=$library['user']; $this->pwd=$library['pwd']; $this->db=$library['db']; $this->type=$library['type']; $this->pdo=new PDO("$this->type:host=$this->host;dbname=$this->db","$this->user","$this->pwd"); if($this->pdo->errorInfo()){ return '数据库连接失败'; } $this->pdo->exec('set names utf8'); return $this->pdo; } //私有的克隆方法 private function __clone(){} //共有的静态方法 public static function getInstance(){ if(self::$dbcont===false){ self::$dbcont=new self; } return self::$dbcont; } public function table($tableName){ $this->table = $tableName; return $this; } //封装query查询方法 public function query($sql){ return $this->pdo->exec($sql); } //封装获取刚刚插入的SQL语句的ID public function getLastInsertId(){ return $this->pdo->lastInsertId(); } //封装增的SQL语句 public function insert($arr){ $str1=""; $str2=""; foreach($arr as $v=>$k){ $str1.=$v.','; $str2.="'$k'".','; } $str1=trim($str1,','); //把去掉最后一个逗号的值放回去 $str2=trim($str2,','); $sql="insert into $this->table($str1)VALUES ($str2)"; $this->pdo->exec($sql); return $this->pdo->lastInsertId(); } //封装getAll() 查所有数据 public function getAll($sql){ return $this->pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC); } //封装getOne() 查某一个字段 第一个参数字段名 第二个参数表名 第三个参数条件 public function getOne($name,$table,$where=1){ return $this->pdo->query("select $name from $table WHERE $where")->fetchAll(PDO::FETCH_ASSOC); } //封装getRow() 查一条数据 public function Row($sql){ return $this->pdo->query($sql)->fetch(PDO::FETCH_ASSOC); } //封装删除的SQL语句 public function delete($table,$where=1){ $sql="delete from $table WHERE $where"; return $this->pdo->exec($sql); } //封装修改的SQL语句 public function up($table,$arr,$where=1){ $str=""; foreach($arr as $v=>$k){ $str.=$v."='$k',"; } $str1=trim($str,','); $sql="update $table set $str1 WHERE $where"; return $this->pdo->exec($sql); } public function select($columns, $join = null, $where = null, $group = null, $having = null, $order = null, $limit = null){ $columns = implode(',', array_values($columns)); // 需要加条件判断是否为空,是否需要拼接 $sql = "select ".$columns." from `".$this->table."` "; if($join!=null){ $sql .= $join; } if($where!=null){ $sql .= " where ".$where; } if($group!=null){ $sql .= " group by ".$group; } if($having!=null){ $sql .= " having ".$having; } if($order!=null){ $sql .= " order by ".$order; } if($limit!=null){ $sql .= " limit ".$limit; } echo $sql;exit; $res = $this->query($sql)->getAll(); return $res; } } //实现接口 class mysql implements Factory{ public function createDB(){ return mysqldb::getInstance(); } } //测试 $db= new mysql; $sql="select * from essay"; $arr=$db->createDB()->getAll($sql); var_dump($arr);
简单的单利模式封装数据库
最新推荐文章于 2022-02-23 01:16:21 发布