php实现简单链式操作mysql数据库类
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 }