<?php
//添加了一个 _createSql 方法,负责创建所有sql
class Db{
static private $ins;
private $pdo;
private $table;
private $where;
private $field = '*';
private $joinWhere = 'where';
private $order;
private $limit; final private function __construct(){
//从配置文件读入数据库信息
$dsn = 'mysql:dbname=wxguide;host=127.0.0.1' ;
$user = 'root';
$password = ''; try {
$this->pdo = new PDO ( $dsn , $user , $password );
} catch ( PDOException $e ) {
die('Connection failed: ' . $e -> getMessage ());
}
} final private function __clone(){} static public function table($table){
if(!self::$ins instanceof self){
self::$ins = new self();
}
self::$ins->table = $table;
return self::$ins;
} public function query($sql){
return $this->pdo->query($sql);
} public function exec($sql){
return $this->pdo->exec($sql);
} public function insert($data){
$type = 'insert';
$sql = $this->_createSql($type,$data);
return $this->exec($sql);
} public function delete(){
$type = 'delete';
$sql = $this->_createSql($type);
return $this->exec($sql);
} public function update($data){
$type = 'update';
$sql = $this->_createSql($type,$data);
return $this->exec($sql);
} public function find(){
$type = 'select';
$sql = $this->_createSql($type);
return $this->query($sql)->fetch(PDO::FETCH_ASSOC);
} public function select(){
$type = 'select';
$sql = $this->_createSql($type);
return $this->query($sql)->fetchAll(PDO::FETCH_ASSOC); } //条件字符串的【条件的值】需要用 引号(值如果是数字可以不用,但是用也没影响,建议不用),如: $str = 'id = 1 and name = "王五" '
public function where($str){
$this->where = $str;
return $this;
} public function field($str){
$this->field = $str;
return $this;
} public function limit($numstr){
$this->limit = 'limit ' . $numstr;
return $this;
} public function order($str){
$this->order = 'order by ' . $str;
return $this;
} public function group(){ } public function having(){ } //给表取别名
public function alias($str){
$this->table .= ' ' . $str;
return $this;
} //可以多表联查,join('tb1 b,tb2 c','a,id=b.id and a.id = c.id')
//$join 可以取值 INNER,left或者right,默认值是 INNER
public function join($alias,$where = null,$join = 'INNER'){
$this->where .= $where;
if($join != 'INNER'){
$this->table .= ' '.$join . ' join ' . $alias;
$this->joinWhere = 'ON';
}else{
$this->table .= ',' . $alias;
}
return $this;
} //创建sql
private function _createSql($type,$data=null){
switch ($type) {
case 'insert':
$arr = $this->_cf($data);
$sql = 'insert into ' . $this->table . ' (' . $arr['kstr'] . ') VALUES (' . $arr['vstr'] . ')';
break; case 'delete':
$sql = 'delete from ' . $this->table . ' '.$this->joinWhere.' ' . $this->where;
break; case 'update':
$arr = $this->_cf($data);
$sql = 'update ' . $this->table . ' set '. $arr['ustr'] .' '.$this->joinWhere.' ' . $this->where;
break; case 'select':
$sql = 'select '. $this->field .' from ' . $this->table;
if($this->where){
$sql = $sql . ' '.$this->joinWhere.' ' . $this->where;
}
$sql .= ' '.$this->order;
$sql .= ' '. $this->limit;
break; default:
die('sql创建出现错误');
break;
}
$this->_clear();
return $sql;
} //属性数据还原
private function _clear(){
$this->table = '';
$this->where = '';
$this->field = '*';
$this->joinWhere = 'where';
$this->order = '';
$this->limit = '';
} //拆分 数组,组装数据
private function _cf($data){
$arr = [];
$str = '';
foreach($data as $k=>$v){
$arr['k'][] = $k;
$arr['v'][] = '"'.$v.'"';
$str .= $k . '="' . $v . '",';
}
$arr['kstr'] = implode(',',$arr['k']);
$arr['vstr'] = implode(',',$arr['v']);
$arr['ustr'] = rtrim($str, ",");
return $arr;
}
} header('Content-type:text/html;charset=gbk'); $a = Db::table('model')->where('1')->select();
print_r($a);

最新文章

  1. python单元测试unittest
  2. LB 简单比较 – F5、NetScaler、LVS、Nginx、Haproxy
  3. CUBRID学习笔记 39 net使用dataset 返回查询的数据
  4. bzoj 1816: [Cqoi2010]扑克牌
  5. zend studio10破解
  6. MYCAT介绍
  7. 零基础学习IOS开发(二)- 使用cocos2d-x3.0 执行Hello world
  8. hdu Joseph
  9. js编码规范
  10. 链表-Add Two Numbers
  11. (纪念第一道完全自己想的树DP)CodeForces 219D Choosing Capital for Treeland
  12. 计算机基础理论知识梳理篇(三):VLAN与VLAN网卡相关概念
  13. Hello_Git!!!(Git的安装)
  14. selenium下打开Chrome报错解决
  15. js滚动条如何缓慢的回到顶部?
  16. 记录一下使用Ubuntu16.0.4配置和使用docker registry
  17. Android 国内集成使用谷歌地图
  18. BZOJ3142 [Hnoi2013]数列 【组合数学】
  19. Android Launcher分析和修改
  20. 20155301 2016-2017-2 《Java程序设计》第6周学习总结

热门文章

  1. 从一个实例看javascript几种常用格式的转换
  2. D. Powerful array 离线+莫队算法 给定n个数,m次查询;每次查询[l,r]的权值; 权值计算方法:区间某个数x的个数cnt,那么贡献为cnt*cnt*x; 所有贡献和即为该区间的值;
  3. plsql programming 13 其他数据类型
  4. Android DRM
  5. MFC中改变控件的大小和位置(zz)
  6. easyui datagrid onLoadSuccess加载两次。。
  7. poj 1698(拆点+最大匹配)
  8. 如何导入和导出应用数据通过电子邮件应用程序在你的IOS
  9. CAS 源码编译
  10. redis 集群安装 3主3从3台云主机