如何实现一个php框架系列文章【6】mysql数据库
使用方便性
采用直接sql语句操作方式。只要会写sql语句,那么将没有其他学习成本。
uctphp框架提供的dba辅助封装类,用会之后将爱不释手。
使用前需要显示初始化并连接到数据库吗,当然不需要。
直到执行第一条sql语句之前,都不会去连接数据库,甚至不会new一个db对象。
dba将会在合适的时机去连接数据库并执行初始化字符编码操作。
查询语句。不需要new一个查询构造器也不提供链式操作方式,那样复杂且低效。
dba提供了以下的查询辅助函数。
|
1
2
3
4
5
6
7
8
9
10
11
12
|
//读一个值Dba::readOne($sql);//读一行Dba::readRowAssoc($sql);//读所有行Dba::readAllAssoc($sql);//读所有行的第一列Dba::readAllOne($sql);//在实际业务场景中,经常会有分页读取部分数据的情况。//只要一个函数即可返回指定页码的数据内容和数据总条数Dba::readCountAndLimit($sql, $page, $limit); |
ps:以上部分函数可以提供一个map函数对返回数组的每一行进行加工处理。
写语句。为什么要区分read和write呢,显然可以扩展做到控制读写分离,双写等功能。
在有各种云数据库和数据库中间件的今天,在数据库层实现是更好的选择。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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支持事务
|
1
2
3
|
Dba::beginTransaction();Dba::commit();Dba::rollBack(); |
3. 长时间运行
在一些需要长时间运行的场景如swoole服务,后台worker等,可能会出现数据库连接超时的情况。
当发现数据库连接超时,dba将会自动尝试重连。
如何实现一个php框架系列文章【6】mysql数据库的更多相关文章
- 如何实现一个php框架系列文章【开篇】
1.本系列文章的目的 实现一个小而美的产品级别php框架 自己动手实现一个新框架仅用于学习交流,不打算替代市面上现有的其他主流框架. 2. 我要一个怎样的PHP框架 简单实用,安全优雅,博采众长 安装 ...
- 如何实现一个php框架系列文章【5】安全处理输入
所有的外部输入参数都应该检查合法性. 未正确处理输入数据将可能导致sql注入等漏洞. 框架提供系列函数来取$_REQUEST中的值 requestInt requestString requestFl ...
- 如何实现一个php框架系列文章【1】如何组织文件
1. 组织文件布局应该考虑什么问题 前后端分离 各业务模块分离但方便互相调用 上传文件安全性 方便接入第三方类库 如图所示 框架入口文件 uct/index.php 框架目录 uct/ ...
- 如何实现一个php框架系列文章【4】url路由管理
直接通过url参数访问业务模块($app)中控制器($ctl)里的函数($act) 我们支持3种路由模式 普通模式 _a=$app, _u=$ctl.$act 最简单的方式,专注实现业务$ac ...
- 如何实现一个php框架系列文章【2】实现类的自动加载
根据前一篇文章的设计原则,我们暂时把php文件分为3类,类名和文件名都遵守如下约定. 类名 文件名 路径 模型类m {$app}Mod {$app}.mod.php {$app}/model ...
- 如何实现一个php框架系列文章【3】支持psr4的自动加载类
psr4自动加载规范https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 我们把第三方使用psr规范的类库放在v ...
- 2019 年起如何开始学习 ABP 框架系列文章-开篇有益
2019 年起如何开始学习 ABP 框架系列文章-开篇有益 [[TOC]] 本系列文章推荐阅读地址为:52ABP 开发文档 https://www.52abp.com/Wiki/52abp/lates ...
- Web框架之Django-20-基于mysql数据库的连接
Web框架之Django-20-基于mysql数据库的连接 想要连接mysql首先需要安装pymysql这个驱动 然后在app的init文件中引入驱动 import pymysql pym ...
- mysql系列八、mysql数据库优化、慢查询优化、执行计划分析
mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. 一.介绍 对mysql优化是一个综合性的技术,主要包括 表的设计合理化(符合3NF) 添加适当索引( ...
随机推荐
- jquery.cookie的使用
今天想到了要为自己的影像日记增加赞的功能,并且需要用到cookie. 记得原生的js操作cookie也不是很麻烦的,但似乎jquery更简单,不过相比原生js,需要额外引入2个文件,似乎又不是很好,但 ...
- C# 工厂模式+虚方法(接口、抽象方法)实现多态
面向对象语言的三大特征之一就是多态,听起来多态比较抽象,简而言之就是同一行为针对不同对象得到不同的结果,同一对象,在不同的环境下得到不同的状态. 实例说明: 业务需求:实现一个打开文件的控制台程序的d ...
- Android之文件数据存储
一.文件保存数据介绍 Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的.文件可用来存放大量数据,如文本.图 ...
- 在将 varchar 值 'xinpian' 转换成数据类型 int 时失败?
把int类型的值修改为varchar类型的值
- sql 删除表中的重复记录
嗯,遇见了表中存在重复的记录的问题,直接写sql删除时最快的,才不要慢慢的复制到excel表中慢慢的人工找呢.哼. 如下sql,找出重复的记录,和重复记录中ID值最小的记录(表中ID为自增长) sel ...
- jQuery 的选择器常用的元素查找方法
jQuery 的选择器常用的元素查找方法 基本选择器: $("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myE ...
- DDD中的Unitwork与DomainEvent如何相容?(续)
上篇中说到了面临的问题(传送门:DDD设计中的Unitwork与DomainEvent如何相容?),和当时实现的一个解决方案.在实际使用了几天后,有了新的思路,和@trunks 兄提出的观点类似.下面 ...
- 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源
前言: 自从我2014年下半年到现在的某电商公司工作后,工作太忙,一直没有写过一篇博客,甚至连14年股票市场的牛市都错过了,现在马上要过年了,而今天又是立春节气,如果再不动手,那么明年这个无春的年,也 ...
- JS模块化开发:使用SeaJs高效构建页面
一.扯淡部分 很久很久以前,也就是刚开始接触前端的那会儿,脑袋里压根没有什么架构.重构.性能这些概念,天真地以为前端===好看的页面,甚至把js都划分到除了用来写一些美美的特效别无它用的阴暗角落里,就 ...
- [C#版本]有趣啊!各种编程语言实现 2 + 2 = 5
首页新闻里面那个 [新闻头条]有趣啊!各种编程语言实现 2 + 2 = 5 其他的就不评论的,但是其中C#版的 真是逗比啊...评论中各种吐槽有木有... static void Main (stri ...