pdo封装2
<?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);
pdo封装2的更多相关文章
- PDO封装函数
header("Content-type: text/html; charset=utf-8"); /** * 初始化 pdo 对象实例 * @param bool $newins ...
- pdo 封装增删改查类
<?php/** * Class model * @package Core\lib */class model{ protected $pdo = null; // 连接数据库 ...
- PDO封装增删改查
<?phpclass db{ public $table=null; public $pdo; public $where=null; //where 条件 public $field=null ...
- 封装:PDO与MySQL之间的无缝切换
以下的例子是将MySQL和PDO封装好,再无缝切换: 文件目录: config.php文件: <?php return array( // 数据库配置 'DB' => array( ' ...
- PHP 封装POD 类
使用POD的过程 //1.造DSN:驱动名:dbname=数据库名;host=服务器地址 $dsn = "mysql:dbname=mydb;host=localhost"; // ...
- 自学PHP的正确方法与经验
我是2015年开始接触认识到PHP编程方面的知识,2012年我还是一名刚毕业的大学生开始踏入社会从事自己一份学校推荐的自动化职业,自动化工作枯燥无味,每天基本上3点一线,食堂-公司机器-宿舍,做了3年 ...
- php学习笔记——学习路线图记录
PHP学习路线图 最全PHP自学指南 W3Cschool小编 2018-04-24 15:23:51 浏览数 (5381) 分享 收录专辑 对于广大零基础的PHP自学者,往往不知道如何系统的学习PHP ...
- 封装PDO函数
funPDO.php <?php /** * @title: 封装PDO函数 * * @Features: * 1. 封装 SELECT ,INSERT,DELETE,UPDATE 操作 @do ...
- PDO 增删改查封装的类
Selecting Data 你在mysql_*中是这样做的 <?php $result = mysql_query('SELECT * from table') or die(mysql_er ...
随机推荐
- mySQL 开启事件存储过程
怎样在Navicat中设置,是数据库按照记录中的日期更新状态字段 其实这个很常用,比如你网站里的某条记录的日期——比如说数据库中某条活动记录的审核日期字段已经过期,亦即当前时间已经超过审核日期,那么定 ...
- 【Mac + Python3.6 + ATX基于facebook-wda】之IOS自动化(二):安装facebook-wda库并编写简易自动化测试脚本
上一篇介绍完如何安装WDA,接下来开始正式安装开发库并编写自动化脚本. 目录: 一.安装facebook-wda库 二.通过WEditor定位元素 三.附录:学习资料 一.安装facebook-wda ...
- LeetCode递归 -2(Recursion) 培训专题 讲解文章翻译 (附链接) (2019-04-09 15:50)
递归 - 空间复杂度 在本文中, 我们将讨论如何分析递归算法的空间复杂度. 在计算递归算法的空间复杂度时,最需要考虑的两个部分就是: 递归相关空间 (recursion related space) ...
- 扒一扒asp.net core mvc控制器的寻找流程
不太会排版,大家将就看吧. asp.net core mvc和asp.net mvc中都有一个比较有意思的而又被大家容易忽略的功能,控制器可以写在非Web程序集中,比如Web程序集:"MyW ...
- JavaScript核心(晋级高手必读篇)
本文是对“ECMA-262-3 in detail”系列学习内容的概述与总结.如果你对ES3系列文章感兴趣,本文每一节内容均包含相应ES3系列章节的链接,以供阅读与获取更深入的解释. 本文预期读者:有 ...
- ABAP小白的成长日记--------helloblog
在外企公司培训了3个月,系统的学习了ABAP,希望开通Blog以后和大家一起深入学习交流.印度人的办事效率是出奇的低,赶超国企公务员.虽然内容cover到了几乎所有R/4的内容,但是还有很多知识没有真 ...
- java微信开发API解析(四)-自己定义菜单以及个性化菜单实现
全局说明 * 具体说明请參考前两篇文章. 本文说明 *本文分为五部分: * 工具类AccessTokenUtils的封装 * 自己定义菜单和个性化菜单文档的阅读解析 * 菜单JSON的分析以及构建相应 ...
- 通过w3c方式 读取xml内容
/** * 通过w3c方式 读取xml内容 * @param lablenames 要读取的节点名称 * @param file_path_name 文件绝对路径 * @return */ publi ...
- 三维空间直线最近点对hdu4741
//求两条直线之间的关系(三维) //输入:两条不为点的直线 //输出:相交返回XIANGJIAO和交点p,平行返回PINGXING,共线返回GONGXIAN int LineAndLine(Line ...
- [Spring Data MongoDB]学习笔记--MongoTemplate查询操作
查询操作主要用到两个类:Query, Criteria 所有的find方法都需要一个query的object. 1. 直接通过json来查找,不过这种方式在代码中是不推荐的. BasicQuery q ...