如何实现一个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) 添加适当索引( ...
随机推荐
- [原] KVM 虚拟化原理探究(2)— QEMU启动过程
KVM 虚拟化原理探究- QEMU启动过程 标签(空格分隔): KVM [TOC] 虚拟机启动过程 第一步,获取到kvm句柄 kvmfd = open("/dev/kvm", O_ ...
- redis成长之路——(一)
为什么使用redis Redis适合所有数据in-momory的场景,虽然Redis也提供持久化功能,但实际更多的是一个disk-backed的功能,跟传统意义上的持久化有比较大的差别,那么可能大家就 ...
- 记:MySQL 5.7.3.0 安装 全程截图
前言: 下一个班快讲MySQL数据库了,正好把服务器里面的MySQL卸了重装了一下. 截个图,作为笔记.也正好留给需要的朋友们. 目录: 下载软件 运行安装程序 安装程序欢迎界面 许可协议 查找更新 ...
- struts2国际化
struts2国际化 1:什么是国际化? 国际化(internationalization)是设计和制造容易适应不同区域要求的产品的一种方式.它要求从产品中抽离所有的与语言,国家/地区和文化相关的元素 ...
- 【开源】知乎日报UWP 更新
说明 大概十天之前我更新了一次APP,后来又仔细看了一下Store里的评论,发现还有几个地方没有改过来.于是前天晚上抽时间改了一下,顺便完善了一下UI体验. 没有看前面文章的童鞋可以看一下下面的链接: ...
- 升讯威ADO.NET增强组件(源码):送给喜欢原生ADO.NET的你
目前我们所接触到的许多项目开发,大多数都应用了 ORM 技术来实现与数据库的交互,ORM 虽然有诸多好处,但是在实际工作中,特别是在大型项目开发中,容易发现 ORM 存在一些缺点,在复杂场景下,反而容 ...
- Go语言实战 - 网站性能优化第一弹“七牛云存储”
由于用户纷纷反应山坡网的打开速度比较慢,所以两天前我们决定把服务器从linode迁移到阿里云. 整个迁移过程非常平滑,基本上一个小时就完成了.而且阿里云的配套设施提供的也很不错,运行状态监控什么的都有 ...
- Entity Framework 6 Recipes 2nd Edition(10-7)译 -> TPH继承模型中使用存储过程
10-7. TPH继承模型中使用存储过程 问题 用一个存储过程来填充TPH继承模型的实体 解决方案 假设已有如Figure 10-7所示模型. 我们有两个派生实体: Instructor(教员)和St ...
- struts debug 标签
< s:debug> 引起下面的错误 org.apache.jasper.JasperException: Caught an exception while getting the pr ...
- Application Request Route实现IIS Server Farms集群负载详解
序言 随着公司业务的发展,后台业务就变的越来越多,然而服务器的故障又像月经一样,时不时的汹涌而至,让我们防不胜防.那么后台的高可用,以及服务器的处理能力就要做一个横向扩展的方案,以使后台业务持续的稳定 ...