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

  1. 使用方便性

采用直接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数据库的更多相关文章

  1. 如何实现一个php框架系列文章【开篇】

    1.本系列文章的目的 实现一个小而美的产品级别php框架 自己动手实现一个新框架仅用于学习交流,不打算替代市面上现有的其他主流框架. 2. 我要一个怎样的PHP框架 简单实用,安全优雅,博采众长 安装 ...

  2. 如何实现一个php框架系列文章【5】安全处理输入

    所有的外部输入参数都应该检查合法性. 未正确处理输入数据将可能导致sql注入等漏洞. 框架提供系列函数来取$_REQUEST中的值 requestInt requestString requestFl ...

  3. 如何实现一个php框架系列文章【1】如何组织文件

    1. 组织文件布局应该考虑什么问题 前后端分离 各业务模块分离但方便互相调用 上传文件安全性 方便接入第三方类库 如图所示 框架入口文件 uct/index.php 框架目录         uct/ ...

  4. 如何实现一个php框架系列文章【4】url路由管理

    直接通过url参数访问业务模块($app)中控制器($ctl)里的函数($act) 我们支持3种路由模式 普通模式 _a=$app,     _u=$ctl.$act 最简单的方式,专注实现业务$ac ...

  5. 如何实现一个php框架系列文章【2】实现类的自动加载

    根据前一篇文章的设计原则,我们暂时把php文件分为3类,类名和文件名都遵守如下约定.   类名 文件名 路径 模型类m {$app}Mod  {$app}.mod.php {$app}/model   ...

  6. 如何实现一个php框架系列文章【3】支持psr4的自动加载类

    psr4自动加载规范https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 我们把第三方使用psr规范的类库放在v ...

  7. 2019 年起如何开始学习 ABP 框架系列文章-开篇有益

    2019 年起如何开始学习 ABP 框架系列文章-开篇有益 [[TOC]] 本系列文章推荐阅读地址为:52ABP 开发文档 https://www.52abp.com/Wiki/52abp/lates ...

  8. Web框架之Django-20-基于mysql数据库的连接

    Web框架之Django-20-基于mysql数据库的连接   想要连接mysql首先需要安装pymysql这个驱动     然后在app的init文件中引入驱动 import pymysql pym ...

  9. mysql系列八、mysql数据库优化、慢查询优化、执行计划分析

    mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. 一.介绍 对mysql优化是一个综合性的技术,主要包括 表的设计合理化(符合3NF) 添加适当索引( ...

随机推荐

  1. ASP.NET Core 中文文档 第四章 MVC(3.9)视图组件

    作者: Rick Anderson 翻译: 娄宇(Lyrics) 校对: 高嵩 章节: 介绍视图组件 创建视图组件 调用视图组件 演练:创建一个简单的视图组件 附加的资源 查看或下载示例代码 介绍视图 ...

  2. Hadoop的安装与设置(1)

    在Ubuntu下安装与设置Hadoop的主要过程. 1. 创建Hadoop用户 创建一个用户,用户名为hadoop,在home下创建该用户的主目录,就不详细介绍了. 2. 安装Java环境 下载Lin ...

  3. 【每日一linux命令2】命令执行顺序:

    二.命令顺序:     若在 shell 内置的命令/bin 以及/usr/bin 之下都出现了命令 pwd,那当我们执行该命令时,会执行哪 一个?答案是第一优先执行 shell 内置的命令,再执行路 ...

  4. 【python之路3】if 语句

    1.if语句用法(if....else....) #!/usr/bin/env python # -*- coding:utf-8 -*- my_name = raw_input("plea ...

  5. 跨平台的 .NET 运行环境 Mono 3.2 新特性

    Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...

  6. mono3.2和monodevelop4.0在ubuntu12.04上两天的苦战

    首先第一步是设置ubuntu server 12.04版更新源,推荐中科大的比较快:deb http://debian.ustc.edu.cn/ubuntu/ precise main multive ...

  7. 【腾讯Bugly干货分享】微信热补丁Tinker的实践演进之路

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ad7a70eaed47bb2699e68e Dev Club 是一个交流移动 ...

  8. 自定义Sublime Text的图标

    sublime text很赞,windows上最接近mac逼格的轻量编辑器,对于我这样比较喜欢格调的人来说,简直不二之选啊. 美中不足的是,看久了觉得它的图标似乎不是很上心.现在都流行扁平化了而它还停 ...

  9. ABP源码分析二十六:核心框架中的一些其他功能

    本文是ABP核心项目源码分析的最后一篇,介绍一些前面遗漏的功能 AbpSession AbpSession: 目前这个和CLR的Session没有什么直接的联系.当然可以自定义的去实现IAbpSess ...

  10. tomcat RMI 停不掉

    项目采用jfinal框架,做了一个RMI的服务,对其它程序提供服务.实现上,写了一个RmiPlugin package com.wisdombud.cloudtalk.plugin; import j ...