实现PHP框架系列文章(6)mysql数据库方法


Posted in PHP onMarch 04, 2016

实现一个mysql数据库封装需要考虑的问题

1.使用方便性

采用直接sql语句操作方式。只要会写sql语句,那么将没有其他学习成本。

uctphp框架提供的dba辅助封装类,用会之后将爱不释手。

使用前需要显示初始化并连接到数据库吗,当然不需要。

直到执行第一条sql语句之前,都不会去连接数据库,甚至不会new一个db对象。

dba将会在合适的时机去连接数据库并执行初始化字符编码操作。

查询语句。不需要new一个查询构造器也不提供链式操作方式,那样复杂且低效。

dba提供了以下的查询辅助函数。

//读一个值
Dba::readOne($sql);
//读一行
Dba::readRowAssoc($sql);
//读所有行
Dba::readAllAssoc($sql);
//读所有行的第一列
Dba::readAllOne($sql);
//在实际业务场景中,经常会有分页读取部分数据的情况。
//只要一个函数即可返回指定页码的数据内容和数据总条数
Dba::readCountAndLimit($sql, $page, $limit);

ps:以上部分函数可以提供一个map函数对返回数组的每一行进行加工处理。

写语句。为什么要区分read和write呢,显然可以扩展做到控制读写分离,双写等功能。

在有各种云数据库和数据库中间件的今天,在数据库层实现是更好的选择。

Dba::write($sql);
/* 直接插入或更新kv形式的array数组
会自动对value进行转义,也支持array类型的值。
如果自己写sql语句要注意使用addslashes或mysql_real_escape_string来保证安全
*/
Dba::insert($table, $insert); 
Dba::update($table, $update, $where);
/*
对批量插入数据有更高的效率
当然过多的行数应该用array_chunk来分批插入。
*/
Dba::insertS($table, $inserts);

2. 事务

使用pdo支持事务

Dba::beginTransaction();
Dba::commit();
Dba::rollBack();

3. 长时间运行

在一些需要长时间运行的场景如swoole服务,后台worker等,可能会出现数据库连接超时的情况。

当发现数据库连接超时,dba将会自动尝试重连。

以上内容是小编给大家介绍的PHP框架系列文章(6)mysql数据库方法,希望对大家有所帮助!

PHP 相关文章推荐
PHP判断文件是否存在、是否可读、目录是否存在的代码
Oct 03 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
PHP常用编译参数中文说明
Sep 27 PHP
ucenter通信原理分析
Jan 09 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 PHP
PHP获取指定日期是星期几的实现方法
Nov 30 PHP
PHP注释语法规范与命名规范详解篇
Jan 21 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
Laravel 之url参数,获取路由参数的例子
Oct 21 PHP
TP5框架实现的数据库备份功能示例
Apr 05 PHP
Codeigniter中集成smarty和adodb的方法
Mar 04 #PHP
PHP常用技巧汇总
Mar 04 #PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
Mar 03 #PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
Mar 03 #PHP
CodeIgniter针对数据库的连接、配置及使用方法
Mar 03 #PHP
CodeIgniter表单验证方法实例详解
Mar 03 #PHP
PHP6新特性分析
Mar 03 #PHP
You might like
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
php session和cookie使用说明
2010/04/07 PHP
PHP实用函数分享之去除多余的0
2015/02/06 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
javascript写的异步加载js文件函数(支持数组传参)
2014/06/07 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
Bootstrap CSS组件之大屏幕展播
2016/12/17 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
jquery+ajaxform+springboot控件实现数据更新功能
2018/01/22 jQuery
浅谈关于iview表单验证的问题
2018/09/29 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
如何正确解决VuePress本地访问出现资源报错404的问题
2020/12/03 Vue.js
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[01:12:27]EG vs Secret 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python中shutil模块的学习笔记教程
2017/04/04 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
python3将视频流保存为本地视频文件
2018/06/20 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
python同时替换多个字符串方法示例
2019/09/17 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
销售人员获奖感言
2014/02/05 职场文书
抵押贷款承诺书
2014/05/30 职场文书
党支部三严三实对照检查材料思想汇报
2014/09/29 职场文书
消费者投诉书范文
2015/07/02 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
竞选稿之小学班干部
2019/10/31 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android