pdo 封装增删改查类
<?php
/**
* Class model
* @package Core\lib
*/
class model
{
protected $pdo = null; // 连接数据库
protected $table = null; // 表名
protected $where = null; // where 条件
protected $order = null; // order 条件
protected $limit = null; // limit
protected $like = ''; // 包含 条件
protected $field = '*'; // 要查询的 条件
/**
* model constructor.
* @param $table
* pdo连接数据库
*/
public function __construct($table)
{
$database = conf::all('database');
$this->table = $table;
try{
$this->pdo = new PDO($database['DSN'], $database['USERNAME'], $database['PASSWD']);
$this->pdo->query('set names utf8');
}catch(\PDOException $e){
p($e->getMessage());
}
}
/**
* @return array
* 查询所有
*/
public function select()
{
$stmt = $this->pdo->prepare("select ".trim($this->field)." from ".$this->table." ".$this->where." ".$this->order." ".$this->limit."");
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $data;
}
/**
* @return mixed
* 单条查询
*/
public function first()
{
$sql = "select ".$this->field." from ".$this->table." ".$this->where." limit 1";
$res = $this->pdo->query($sql);
$res->setFetchMode(PDO::FETCH_ASSOC); //数字索引方式
$row = $res->fetch();
return $row;
}
/**
* @param $data
* @return $this
* 添加
*/
public function insert($data)
{
if(is_array($data)){
$val = array_values($data);
$str = '';
$key = array_keys($data);
$keys = implode(',',$key);
foreach($key as $k=>$v){
$str.=":$v".',';
}
$str = rtrim($str,',');
$stmt=$this->pdo->prepare("insert into ".$this->table."($keys) values($str)");
$arr = [];
foreach($key as $k=>$v){
$arr[':'.$v] = $val[$k];
}
$stmt->execute($arr);
// $this->pdo->lastInsertId();
return $this;
}
}
/**
* @param $data
* @return $this
* 更新 修改
*/
public function update($data)
{
$str = '';
foreach($data as $k=>$v){
$str.=$k.'='.':'.$k.',';
}
$str = rtrim($str,',');
$stmt = $this->pdo->prepare("update ".$this->table." set ".$str." ".$this->where);
$arr = [];
foreach($data as $k=>$v){
$arr[':'.$k] = $v;
}
if($stmt->execute($arr))
{
return $this;
// echo "最后插入的ID:".$this->pdo->lastInsertId();
}else{
echo "执行失败";
}
}
/**
* @return $this
* 删除
*/
public function delete()
{
$sql="delete from ".$this->table." ".$this->where;
$res = $this->pdo->exec($sql);
return $res;
}
/**
* @param $data
* @return $this
* 查询字段
*/
public function field($field)
{
$this->field = is_array( $field ) ? '`' . implode( '`,`', $field ) . '`' : $field;
return $this;
}
/**
* @param $option
* @return $this
* where 条件
*/
public function where($option)
{
$this->where = 'where ';
$and = 'and';
if(is_string($option)){
$this->where.= $option;
}elseif(is_array($option)){
foreach($option as $k=>$v){
$for = $k.'='.$v;
$res = $this->where.= isset($mark) ? ' '.$and.' '.$for : $for;
$mark = 1;
}
}
return $this;
}
/**
* @param $option
* @return $this
* 排序
*/
public function order($option)
{
$this->order = 'order by ';
if(is_string($option)){
$this->order.= $option;
}
return $this;
}
/**
* @param $page
* @param null $pageSize
* @return $this
* 限制条数
*/
public function limit($page,$pageSize = null)
{
if($pageSize == null){
$this->limit = 'limit '.$page;
}else{
$pageval = intval($page-1) * $pageSize;
$this->limit = "limit ".$page.",".$pageval ;
}
return $this;
}
/**
* 字段和表名添加 `符号
* 保证指令中使用关键字不出错 针对mysql
* @param string $value
* @return string
*/
protected function _addChar($value)
{
if ('*'==$value || false!==strpos($value,'(') || false!==strpos($value,'.') || false!==strpos($value,'`')) {
//如果包含* 或者 使用了sql方法 则不作处理
} elseif (false === strpos($value,'`') ) {
$value = '`'.trim($value).'`';
}
return $value;
}
/**
* 过滤并格式化数据表字段
* @param string $tbName 数据表名
* @param array $data POST提交数据
* @return array $newdata
*/
protected function _dataFormat($tbName,$data)
{
if (!is_array($data)) return array();
$table_column = $this->_tbFields($tbName);
$ret=array();
foreach ($data as $key=>$val) {
if (!is_scalar($val)) continue; //值不是标量则跳过
if (array_key_exists($key,$table_column)) {
$key = $this->_addChar($key);
if (is_int($val)) {
$val = intval($val);
} elseif (is_float($val)) {
$val = floatval($val);
} elseif (preg_match('/^\(\w*(\+|\-|\*|\/)?\w*\)$/i', $val)) {
// 支持在字段的值里面直接使用其它字段 ,例如 (score+1) (name) 必须包含括号
$val = $val;
} elseif (is_string($val)) {
$val = '"'.addslashes($val).'"';
}
$ret[$key] = $val;
}
}
return $ret;
}
/**
* 取得数据表的字段信息
* @param string $tbName 表名
* @return array
*/
protected function _tbFields($tbName)
{
$sql = 'SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME="'.$tbName.'" AND TABLE_SCHEMA="'.$this->_dbName.'"';
$stmt = self::$_dbh->prepare($sql);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$ret = array();
foreach ($result as $key=>$value) {
$ret[$value['COLUMN_NAME']] = 1;
}
return $ret;
}
}
转载于:https://www.cnblogs.com/ghjbk/p/6581152.html
pdo 封装增删改查类相关推荐
- python操作postgre库,批量进行增删改查和计时比较效率,封装好的普通增删改查和批量增删改查类拿来即用
python操作postgre库,批量进行增删改查,封装类,拿来即用 1. 新建postgre.py文件,使用psycopg2封装普通增删改查和批量增删改查类 postgre.py import ps ...
- mysql封装增删改查_jdbc封装一行代码实现增删改查
一行代码实现增删改查.支持自定义结果集. 2个测试类(先看效果) public class UserDao extends Dao { public User login(User user) thr ...
- php pdo基础增删改查 postgresql的主键自增设置 time()
主键自增 参考https://www.javadrive.jp/postgresql/table/index10.html和https://stackoverflow.com/questions/48 ...
- VUE+Spring Boot前后端分离开发实战(五):基于shiro鉴权的角色增删改查(CURD)-封装分页组件和所有增删改查模块化
文章目录 前言 后端实现 前端实现 分页组件封装 增删改查模块化 角色管理页面 实现效果 前言 本文在上文基础上把查询.增加.修改以及删除的请求封装在table.js中,实现了所有用到增删改查页面代码 ...
- java上安装zookeeper并且实现增删改查
目录 一..创建Maven工具 二.将Maven的默认配置文件设置为自己下载的配置文件(非必要) 三.在maven文件中导入zookeeper依赖 四.创建增删改查类MyzkTest 五.实现zook ...
- MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)...
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
今天是spring的最后一节课,这节课老师讲了spring与hibernate整合完成增删改查的操作,这是很重要的一节课,这也是第一次真正的实现spring结合Hibernate和数据库连接上,下面是 ...
- 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)...
最近看老罗的视频,跟着完成了利用Java操作MySQL数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...
- mysql封装 javabean,利用Java针对MySql封装的jdbc框架类JdbcUtils完整实现(包含增删改查、JavaBean反射原理,附源码)...
最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...
最新文章
- Zabbix 监控Mysql 主从状态(Python脚本)
- hive export import
- 【Eclipse提高开发速度-插件篇】安装VJET插件,JS等提示开发插件
- WPF:ListView数据绑定及Style
- 烂泥:CentOS6.5挂载windows共享文件夹
- 【★】假如人类使用16进制
- htmlcss基础知识点表单
- MySQL 5.1 安装过程中报apply security setting错误的解决办法 收藏
- 单片机之魂——定时器、中断
- [bzoj1497][NOI2006]最大获利_网络流_最小割
- C与C++关于*与的传参解析
- linux下mysql连接_Linux下MySQL C++连接操作
- MySQL数据库面试题(2020最新版)
- FTP搜索引擎开发文档前言部分
- 在计算机图形学中多边形的表示方法通常有,计算机图形学复习大纲
- day02-08 python基础语法
- 电脑桌面便签小工具下载,专业桌面待办便签软件
- 全方面手把手从0到1带你开发谷歌浏览器插件
- Linux 7 提示 -bash: ifconfig: command not found
- TryHackMe-Gatekeeper
热门文章
- Mysql 5.7.10以上版本安装大坑
- 【原创】kafka client源代码分析
- ASP.Net MVC框架配置分析详解
- 【Python】多线程
- Eclipse(STS) 初次搭建Spring Cloud项目之声明式REST调用+负载均衡实现Feign(四)
- linux lnmp1.5 部署laravel项目
- selenium测试(Java)--学习总结
- 智慧城市建设面临“三座大山” 安全与服务需两手抓
- SQLServer------聚集索引和非聚集索引的区别
- (转)常用正则表达式