【原创】PDO链式操作数据库封装类(ORM)
原创

【原创】PDO链式操作数据库封装类(ORM)
勾国印原创PDO链式调用封装类,支持链式操作、读写分离、事务和锁机制。核心类库自动加载,提供常用公共函数和助手函数以及异常处理机制。只需引用一个文件即可使用所有功能。

使用方法

解压压缩包后,引入init.php
include($_SERVER['DOCUMENT_ROOT']."/frame/init.php");
修改config目录下的数据库配置文件,develop.php为测试环境配置文件,product.php为正式环境配置文件,更多用法参考demo.php。

常用数据库操作

1、查询单条数据
M('user')->where('id = 1')->find(); //返回所有字段数组
M('user')->where('id = 1')->find(‘name’); //返回'name'字段数组
M('user')->where('id = 1')->find(‘name’, false); //返回'name'之外字段数组
M('user')->where('id = 1')->find(‘id,name’); //返回指定多个字段数组
M('user')->where('id = 1')->show(true)->find(‘name’); ////只返回sql语句不执行
2、查询多条数据
M('user')->where('status = 1')->limit(1, 10)->findAll(); //返回所有字段数组
M('user')->where('status = 1')->limit(1, 10)->findAll(‘name’); //返回指定字段数组
M('user')->where('status = 1')->limit(1, 10)->findAll(‘name’, false); //返回指定字段之外数组
M('user')->where('status = 1')->page(1, 10)->findAll(‘name’); //分页查询,page(当前页码,每页展示数量)
M('user')->where('status = 1')->limit(20)->lock(true)->findAll(); //加锁,非INNODB存储引擎无效,主要用于事务
M('user')->where('status = 1 and age >= 18')->limit(10)->show(true)->findAll(); //只返回sql语句不执行
3、多表联查
M('user')->join('order')->on('user.id = order.user_id')->where('user.status = 1')->findAll(); //两表联查,默认为内连查询(INNER JOIN)
M('user')->join('order', 'left')->on('user.id = order.user_id')->join('goods', 'right')->on('goods.id = order.goods_id')->where('user.status = 1')->findAll(); //三表联查,左联查询(LEFT JOIN)
4、查询数量
M('user')->where('status = 1')->findAll('count(*)');或M('user')->where('status = 1')->count(); //返回数据数量
M('user')->where('status = 1')->show(true)->count(); //只返回sql语句不执行
5、添加单条数据
M('user')->add(['name' => '勾国印', 'sex' => 1, 'age' => 18]); //返回新插入数据的自增id
M('user')->show(true)->add(['name' => '勾国印', 'sex' => 1, 'age' => 18]); //只返回sql语句不执行
6、添加多条数据
M('user')->addAll(['name' => '勾国印', 'sex' => 1, 'age' => 18], ['name' => '勾国磊', 'sex' => 2, 'age' => 19], ['name' => '张东川', 'sex' => 0, 'age' => 16]); //返回影响行数(参数个数不限,但是字段必须相同)
M('user')->show(true)->addAll(['name' => '勾国印', 'sex' => 1, 'age' => 18], ['name' => '勾国磊', 'sex' => 2, 'age' => 19], ['name' => '张东川', 'sex' => 0, 'age' => 16]);  //只返回sql语句不执行
7、更新数据
M('user')->where('id = 1')->update(['sex' => 2]); //返回布尔值,不管更新数据有没有改动都返回true,除非操作失败返回false
M('user')->where('id = 1')->show(true)->update(['sex' => 2]); //只返回sql语句不执行
8、删除数据
M('user')->where('id = 1')->delete(); //返回布尔值
M('user')->where('id = 1')->show(true)->delete(); //只返回sql语句不执行
9、执行原生sql语句(自动读写分离)
M()->query('select id from user where status = 1'); //查询数据,返回结果集数组
M()->query('select count(*) from user where status = 1'); //查询数量,返回结果集数量
M()->query("insert into user set  name = '勾国印'"); //新增数据,返回新插入数据的自增id
M()->query("update user  set name = '勾国印' where id = 10"); //返回布尔值,不管更新数据有没有改动都返回true,除非操作失败返回false
M()->query("delete from user  where id = 10"); //删除数据,返回布尔值
M()->show(true)->query("select id from user where status = 1");  //只返回sql语句不执行
10、事务处理(非INNODB存储引擎无效)
try{
    M('user')->startTrans(); //开启事务
    M('user')->add(['name' => '勾国印']); //具体数据库操作
    M('user')->commit(); //提交事务
}catch(PDOException $e){
    echo $e->getMessage();
    M('user')->rollback(); //回滚
} 

常用公共函数

1、M($tableName = ' ', $tablePrefix = ' '): 实例化模型

M('user')->find();
2、I($name, $default = ' ') :获取请求参数值
$page =  I('p', 1);
3、C($name, $default = ' ') :获取配置文件里的配置字段
C('EMAIL'); //返回EMAIL数组
C('EMAIL.EMAIL_TITLE', '勾国印'); //返回EMAIL_TITLE字段的值,如果不存在返回默认值
4、_uri($table_name, $where, $field = null, $show = flase):获取单条数据/字段
_uri('user', 'id = 1'); //返回id为1的会员所有字段数组
_uri('user', 'id = 1', 'name'); //返回id为1的会员名字,如勾国印
_uri('user', 2, 'sex'); //返回主键字段为2的会员性别,如男
_uri('user', 'id = 1', 'name,sex'); //返回id为1的会员名字和性别数组
_uri('user', 2, 'name,sex'); //返回主键字段为2的会员名字和性别数组
_uri('user', 2, 'name,sex', true); //只返回sql语句不执行
5、_list($table_name, $where, $num = 10, $order_by = 'id desc', $field = null, $show = false):获取多条数据
_list('user', 'status = 1', 0); //返回所有满足条件的所有字段数组
_list('user', 'status = 1', 10); //返回10条所有满足条件的所有字段数组
_list('user', 'status = 1', 20, 'id desc,sort asc', 'name,sex'); //返回20条所有满足条件的指定字段数组
_list('user', 'status = 1', 20, 'id desc,sort asc', 'name,sex', true); //只返回sql语句不执行
6、cookie($key, $value = ' ', $expire = 24):cookie操作,过期时间单位小时
cookie('name', '勾国印'); //设置cookie
cookie('name'); //获取键为name的cookie值
cookie('name', null); //删除键为name的cookie值

7、session($key, $value = ' '):session操作

session('name', '勾国印'); //设置session
session('name'); //获取键为name的session值
session('name', null); //删除键为name的session值
8、send_email($eamil, $title, $content):发送邮件
$message= array(
  	'id' => 1,
	'title' => '商品一',
	'price' => 100,
);
send_email('gouguolei@vip.qq.com', '邮件标题', var_export($message, true));
9、http_request($url, $type = 'get', $data = null, $content_type = 'application/json', $time_out = 20):模拟curl请求
$api_url = 'http://192.168.1.222:9088/ethank-member-manager/memberCardExternalCall/addRewards.json';
        
$info = array(
    'phoneNum' => '18515947075',
    'price'  => 100,
);        

$result = json_decode(http_request($api_url, 'GET', $info), true);
10、id_encrypt($id, $length = 10):数字加密,返回字符串。(默认加密后长度为10)
id_encrypt(1); //返回FzxxmyQzxV
11、id_descrypt($str):解密加密后的字符串,返回数字
id_descrypt('FzxxmyQzxV'); //返回1
12、random_hash($length = 4):生成随机字符串
random_hash(10); //返回nWn3BhJ2CG
13、get_client_ip():获取访问ip
get_client_ip(); //返回223.72.90.34、
14、ajaxReturn($code, $msg, $response):返回AJAX数据
ajaxReturn('200', '登录成功');
ajaxReturn('200', '登录成功', ['user_id' => 1]);

调试模式

在url上加上debug=1参数即可开启调试模式,会在当前页面展示sql错误和异常错误,参数名可以在init.php文件里定义
define('DEBUG_PARAM', 'debug');

版权属于:够过瘾——挨踢男的葵花宝典

文章链接:http://www.gouguoyin.cn/php/129.html

转载时必须以链接形式注明原始出处及本声明。

如果您觉得本文对您有所帮助,请小额赞助一下,我会优先回答您在使用过程中出现的问题,点此赞助

如有疑问或遇到技术问题,请加官方QQ群: 421537504   GoCMS官方交流群

文章点评:

表情

115条评论

  • wiliam 6天前
    来学习优秀代码
  • sky_wlc 6天前
    不评论下载不了代码呀。
  • fanlaasdf 2周前
    经过测试:>;br/>;M('user')->join('order')->on('user.id = order.user_id')->where('user.status = 1')->findAll(); //两表联查,默认为内连查询(INNER JOIN)>;br/>;M('user')->join('order', 'left')->on('user.id = order.user_id')->join('goods', 'right')->on('goods.id = order.goods_id')->where('user.status = 1')->findAll(); //三表联查,左联查询(LEFT JOIN)>;br/>;>;br/>;程序跑不起来的。处理 join on 代码块 有问题的。
  • qi500 2周前
    好像不错的样子
  • curing 1月前
    下载下来看看!
  • songmumu 1月前
    看起来很简洁的操作方式
  • wumoto 1月前
    下载下来看看!
  • 时间才是最大的情敌 1月前
    我来说几句把
  • 小鱼式 2月前
    wwwwwwwwwwww
  • PJ小乐 2月前
    经过测试:>;br/>;M('user')->join('order')->on('user.id = order.user_id')->where('user.status = 1')->findAll(); //两表联查,默认为内连查询(INNER JOIN)>;br/>;M('user')->join('order', 'left')->on('user.id = order.user_id')->join('goods', 'right')->on('goods.id = order.goods_id')->where('user.status = 1')->findAll(); //三表联查,左联查询(LEFT JOIN)>;br/>;>;br/>;程序跑不起来的。处理 join on 代码块 有问题的。
  • firberhome 2月前
    看起不错
  • PJ小乐 2月前
    看到过类似用法,下下来研究下看看。
  • 千度云 2月前
    不错呀
  • 晃晃悠悠 2月前
    我来说几句把
  • jsran 2月前
    我来说几句把
  • chubby 3月前
    评论点什么呢
  • 彪_ 3月前
    下载还需评论
  • jjj123456 3月前
    123
  • sfshj 3月前
    shis
  • oscode 4月前
    非常好用,找了好久才找到的mysql类库.