php数据库操作类
话不多说,直接上代码!
model.php
这里面为PHP的数据库操作类。
1 <?php 2 $config = include 'config.php'; 3 $m = new Model($config); 4 // $m->limit('0,5') 5 // ->table('imooc_cate') 6 // ->field('id,cName') 7 // ->order('id desc') 8 // ->where('id>3') 9 // ->select(); 10 // var_dump($m->sql); 11 12 // var_dump($m->limit('0,5')->table('imooc_cate')->field('id,cName') ->where('id>=3') ->select()); 13 // var_dump($m->sql); 14 15 //插入 16 // $data = ['Cname'=>'面包屑']; 17 // $insertId = $m->table('imooc_cate')->insert($data); 18 // var_dump($insertId); 19 20 //删除 21 // $deleteId = $m->table('imooc_cate')->where('cName=数码产品')->delete(); 22 // var_dump($deleteId); 23 // var_dump($m->sql); 24 25 // 更新 26 // $data = ['cName'=>'你真搞笑']; 27 // var_dump($m->table('imooc_cate')->where('id=7')->update($data)); 28 // var_dump($m->sql); 29 30 //max函数 31 // var_dump($m->table('imooc_cate')->max('id')); 32 33 var_dump($m->getBycName('你真搞笑')); 34 class Model{ 35 // 主机名 36 protected $host; 37 // 用户名 38 protected $user; 39 // 密码 40 protected $pwd; 41 // 数据库名 42 protected $dbname; 43 // 字符集 44 protected $charset; 45 // 数据表前缀 46 protected $prefix; 47 48 49 // 数据库连接资源 50 protected $link; 51 // 数据表名 可以指定表名 52 protected $tableName='imooc_cate'; 53 // sql语句 54 protected $sql; 55 // 操作数组 存放的是所有的查询条件 56 protected $options; 57 58 // 构造方法,对成员变量进行初始化 59 function __construct($config){ 60 //对成员变量进行初始化 61 $this->host = $config['DB_HOST']; 62 $this->user = $config['DB_USER']; 63 $this->pwd = $config['DB_PWD']; 64 $this->dbname = $config['DB_NAME']; 65 $this->charset = $config['DB_CHARSET']; 66 $this->prefix = $config['DB_PREFIX']; 67 68 //连接数据库 69 $this->link = $this->connect(); 70 71 //得到数据表名 User=》UserModel Article=》ArticleModel 72 $this->tableName = $this->getTableName(); 73 //初始化options数组 74 $this->initOptions(); 75 } 76 //连接数据库 77 protected function connect(){ 78 $link = mysqli_connect($this->host, $this->user, $this->pwd); 79 if (!$link){ 80 die('数据库连接失败'); 81 } 82 mysqli_select_db($link, $this->dbname); 83 mysqli_set_charset($link, $this->charset); 84 return $link; 85 } 86 //得到表名 87 protected function getTableName(){ 88 //如果设置了成员变量,那么就通过成员变量来得到表名 89 if (!empty($this->tableName)){ 90 return $this->prefix.$this->tableName; 91 } 92 //如果没有设置成员变量,那么通过类名来得到表名 93 /*得到当前类名 表名字符串*/ 94 $className = get_class($this); 95 $table = strtolower(substr($className, 0,-5)); 96 return $this->prefix.$table; 97 } 98 //初始化操作数组 99 protected function initOptions(){ 100 $arr = ['where','table','field','order','group','having','limit']; 101 foreach ($arr as $value){ 102 //将options数组中键的值全部清空 103 $this->options[$value]= ''; 104 //将table默认设置为table 105 if($value == 'table'){ 106 $this->options[$value] =$this->tableName; 107 }elseif ($value == 'field'){ 108 $this->options[$value] = '*'; 109 } 110 } 111 } 112 // field方法 113 function field($field){ 114 //如果不为空再进行处理 115 if (!empty($field)){ 116 if (is_string($field)){ 117 $this->options['field'] = $field; 118 }elseif (is_array($field)){ 119 $this->options['field']= join(',', $field); 120 } 121 } 122 return $this; 123 } 124 // table方法 125 function table($table){ 126 if (!empty($table)){ 127 $this->options['table']=$table; 128 } 129 return $this; 130 } 131 // where方法 132 function where($where){ 133 if (!empty($where)){ 134 $this->options['where'] = 'where '.$where; 135 } 136 return $this; 137 } 138 // group方法 139 function group($group){ 140 if (!empty($group)) { 141 $this->options['group'] = 'group by'.$group; 142 } 143 return $this; 144 } 145 // having方法 146 function having($having){ 147 if (!empty($having)) { 148 $this->options['having'] = 'having '.$having; 149 } 150 return $this; 151 } 152 // order方法 153 function order($order){ 154 if (!empty($order)) { 155 $this->options['order'] =' order by '.$order ; 156 } 157 return $this; 158 } 159 // limit方法 160 function limit($limit){ 161 if (!empty($limit)) { 162 if (is_string($limit)){ 163 $this->options['limit'] = ' limit '.$limit; 164 }elseif (is_array($limit)){ 165 $this->options['limit'] = ' limit ' .join(',',$limit); 166 } 167 } 168 return $this; 169 } 170 // select方法 查询 171 function select(){ 172 //先预写一个带有占位符的sql语句 173 $sql = 'select %FIELD% from %TABLE% 174 %WHERE% %GROUP% %HAVING% %ORDER% %LIMIT%'; 175 //将options中对应的值以此替换上面的占位符 176 $sql = str_replace(['%FIELD%','%TABLE%','%WHERE%','%GROUP% ','%HAVING%','%ORDER%',' %LIMIT%'] 177 , [$this->options['field'],$this->options['table'],$this->options['where'], 178 $this->options['group'],$this->options['having'],$this->options['order'], 179 $this->options['limit']], $sql); 180 //保存一份sql语句,便于调试 181 $this->sql = $sql; 182 //执行生气了语句 183 return $this->query($sql); 184 } 185 //insert方法 插入 186 //$data为关联数组,键是字段名,值就是字段值 187 function insert($data){ 188 //处理字符串问题 两边需要加单双引号 189 $data = $this->parseValue($data); 190 //insert into table(字段) value (值) 191 //提取所以的键(字段) 192 $keys = array_keys($data); 193 //提取所有的值 194 $values = array_values($data); 195 //增加数据的sql语句 196 $sql = 'insert into %TABLE%(%FIELE%) values (%VALUES%)'; 197 $sql = str_replace(['%TABLE%','%FIELE%','%VALUES%'], 198 [$this->options['table'],join(',', $keys),join(',', $values)], $sql); 199 $this->sql = $sql; 200 return $this->exec($sql,true); 201 } 202 203 //传递进来一个数组,将数组中值为字符串的两边加引号 204 protected function parseValue($data){ 205 foreach ($data as $key => $value){ 206 //判断是不是为字符串 207 if(is_string($value)){ 208 $value = '"'.$value.'"'; 209 } 210 $newData[$key] = $value; 211 } 212 return $newData; 213 } 214 215 216 //delete函数 删除 217 function delete(){ 218 $sql = 'delete from %TABLE% %WHERE%'; 219 $sql = str_replace(['%TABLE%','%WHERE%'], 220 [$this->options['table'],$this->options['where']], 221 $sql); 222 $this->sql = $sql; 223 224 return $this->exec($sql); 225 } 226 //更新函数 update 227 //$data为关联数组,键是字段名,值就是字段值 228 //update 表名 set 字段名=字段值,字段名=字段值 229 function update($data){ 230 //处理字符串问题 两边需要加单双引号 231 $data = $this->parseValue($data); 232 //拼接为固定的格式 233 $value = $this->parseUpdate($data); 234 //准备sql语句 235 $sql = 'update %TABLE% set %VALUE% %WHERE%'; 236 $sql = str_replace(['%TABLE% ','%VALUE%','%WHERE%'] 237 , [$this->options['table'],$value,$this->options['where']], $sql); 238 $this->sql = $sql; 239 return $this->exec($sql); 240 } 241 protected function parseUpdate($data){ 242 foreach ($data as $key => $value){ 243 $newData[] = $key.'='.$value; 244 } 245 return join(',', $newData); 246 } 247 248 249 250 // query 有结果集 251 function query($sql){ 252 //清空options中的值 253 $this->initOptions(); 254 255 // var_dump($sql); 256 // exit(); 257 258 $result = mysqli_query($this->link, $sql); 259 //提取结果集存放到数组中 260 if ($result && mysqli_affected_rows($this->link)) { 261 while ( $data = mysqli_fetch_assoc($result)){ 262 $newData[] = $data; 263 } 264 } 265 return $newData; 266 } 267 // exec 无结果集 268 function exec($sql,$isInsert=false){ 269 //清空options中的值 270 $this->initOptions(); 271 272 $result = mysqli_query($this->link, $sql); 273 if ($result && mysqli_affected_rows($this->link)) { 274 if($isInsert){ 275 return mysqli_insert_id($this->link); 276 }else{ 277 return mysqli_affected_rows($this->link); 278 } 279 } 280 return false; 281 } 282 283 //获取sql语句 284 function __get($name){ 285 if ($name == 'sql') { 286 return $this->sql; 287 } 288 return false; 289 } 290 291 292 // max函数 293 function max($field){ 294 $result = $this->field('max('.$field.') as max') 295 ->select(); 296 return $result[0]['max']; 297 } 298 //析构方法 299 function __destruct(){ 300 mysqli_close($this->link); 301 } 302 //魔术方法 getBy+你要查询的字段名称 303 function __call($name,$args){ 304 //获取钱5个字符 305 $str = substr($name, 0,5); 306 //获取后面的字段名 307 $field = strtolower(substr($name, 5)); 308 //判断前五个是否为getBy 309 if ($str == 'getBy') { 310 return $this->where($field.'="'.$args[0].'"')->select(); 311 } 312 return false; 313 } 314 315 316 317 }
config.php
为数据库连接是需要的配置信息
<?php header('Content-type:text/html;charset=utf8'); return [ 'DB_HOST' => 'localhost', 'DB_USER' => 'root', 'DB_PWD'=>'l密码', 'DB_NAME'=>'你的数据库名', 'DB_CHARSET'=>'utf8', 'DB_PREFIX'=>'' ];