php实现简单链式操作mysql数据库类

时间:2022-12-11 10:54:57
  1 <?php
  2 $dbConfig = require_once(dirname(__FILE__).'/config.php');
  3  
  4 class Db{
  5     public $conn;
  6     private $host = null;
  7     private $user     = null;
  8     private $password = null;
  9     private $database = null;
 10     private $tablename = null;
 11     private $dbConfig = null;
 12     private $sql = [
 13         'where'   => null,
 14         'orderBy' => null,
 15         'limit'   => null,
 16     ];
 17  
 18  
 19     public function __construct($tablename = '') {
 20         global $dbConfig;
 21         $this->dbConfig = $dbConfig;
 22         $this->tablename = $dbConfig['DB_PREFIX'].$tablename;
 23         $this->user = $dbConfig['DB_USER'];
 24         $this->host = $dbConfig['DB_HOST'];
 25         $this->password = $dbConfig['DB_PWD'];
 26         $this->database = $dbConfig['DB_NAME'];
 27         $dsn = 'mysql:dbname='.$this->database.';host='.$this->host.';port=3306';
 28         try {
 29             $this->conn = new PDO($dsn, $this->user, $this->password); // also allows an extra parameter of configuration
 30         } catch(PDOException $e) {
 31             die('Could not connect to the database:<br/>' . $e);
 32         }
 33     }
 34  
 35     public function table($tablename) {
 36         $this->tablename = $this->dbConfig['DB_PREFIX'].$tablename;
 37         return $this;
 38     }
 39  
 40     public function getAll($fields = '*') {
 41         $querySql = sprintf("SELECT %s FROM %s", $fields, $this->tablename);
 42         if(!empty($this->sql['where'])) {
 43             $querySql .= ' WHERE ' . $this->sql['where']; 
 44         }
 45         if(!empty($this->sql['orderBy'])) {
 46             $querySql .= ' ORDER BY ' . $this->sql['orderBy']; 
 47         }
 48         if(!empty($this->sql['limit'])) {
 49             $querySql .= ' LIMIT ' . $this->sql['limit']; 
 50         }
 51         return $this->query($querySql);
 52     }
 53  
 54     public function getOne($fields = '*') {
 55         $result = $this->getAll($fields);
 56         return isset($result[0]) ? $result[0] : null;
 57     }
 58  
 59     public function insert($data) {
 60         foreach ($data as $key => &$value) {
 61             $value = addslashes($value);
 62         }
 63         $keys = "`".implode('`,`', array_keys($data))."`";
 64         $values = "'".implode("','", array_values($data))."'";
 65         $querySql = sprintf("INSERT INTO %s ( %s ) VALUES ( %s )", $this->tablename, $keys, $values);
 66         return $this->query($querySql);
 67     }
 68  
 69     public function delete() {
 70         $querySql = sprintf("DELETE FROM %s WHERE ( %s )", $this->tablename, $this->sql['where']);
 71         return $this->query($querySql);
 72     }
 73  
 74     public function update($data) {
 75         $updateFields = [];
 76         foreach ($data as $key => $value) {
 77             $up_value = addslashes($value);
 78             $updateFields[] = "`$key`='$up_value'";
 79         }
 80         $updateFields = implode(',', $updateFields);
 81         $querySql = sprintf("UPDATE %s SET %s", $this->tablename, $updateFields);
 82  
 83         if(!empty($this->sql['where'])) {
 84             $querySql .= ' WHERE ' . $this->sql['where']; 
 85         }
 86  
 87         return $this->query($querySql);
 88     }
 89  
 90     public function query($querySql) {
 91         $querystr = strtolower(trim(substr($querySql,0,6)));
 92         $stmt = $this->conn->prepare($querySql);
 93         $ret = $stmt->execute();
 94  
 95         if(!$ret) print_r($stmt->errorInfo());
 96  
 97         if($querystr == 'select') {
 98             $retData = $stmt->fetchAll(PDO::FETCH_ASSOC);
 99             return $retData;
100         }elseif($ret && $querystr == 'insert') {
101             return $this->conn->lastInsertId();
102         }else{
103             return $ret;
104         }
105     }
106  
107  
108     public function limit($limit, $limitCount = null) {
109         if(!$limitCount) {
110             $this->sql['limit'] = $limit;
111         }else{
112             $this->sql['limit'] = $limit .','. $limitCount;
113         }
114         return $this;
115     }
116  
117     public function orderBy($orderBy) {
118         $this->sql['orderBy'] = $orderBy;
119         return $this;
120     }
121  
122     public function close() {
123         return $this->conn = null;
124     }
125  
126     public function where($where) {
127         if(!is_array($where)) {
128             return null;
129         }
130         $crondsArr = [];
131         foreach ($where as $key => $value) {
132             $fieldValue = $value;
133             if(is_array($fieldValue)) {
134                 $crondsArr[] = "$key ".$fieldValue[0]. ' ' . addslashes($fieldValue[1]);
135             }else{
136                 $fieldValue = addslashes($fieldValue);
137                 $crondsArr[] = "$key='$fieldValue'";
138             }
139         }
140         $this->sql['where'] = implode(' AND ', $crondsArr);
141  
142         return $this;
143     }
144     
145 }