Download the PHP package lipowei/db without Composer
On this page you can find all versions of the php package lipowei/db. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Package db
Short Description mysql 数据库操作;安全:全程预处理模式防SQL注入,自动添加反引号防表字段与关键词冲突;支持主从分布,支持配置参数保存;
License MIT
Informations about the package db
php mysql 防SQL注入预处理封装库
版本支持
php5.6、7.*
安装
composer require tcwei/db
使用(支持分布式读写分离,可自动保存配置,无需初始化)
引入 vendor 目录下的 autoload.php
手册
::transaction($callback, $errorCallback = null)
::table($tableString, $transform = true)
- $tableString 可以是单个表名,也可以是关联表,例如:
$tableString = 'users a left join email b on(a.id=b.user_id)'
这样 $tableString 就很灵活了,而且不管你怎么写,都会自动加反引号。 - $transform,是否为 $tableString 自动添加反引号。如果你确保自己不需要加反引号,可以设置为 false
JOIN表相关
->where($where, $conditionOrValue = null, $value = null)
-
where() 可以仅接受1个参数,这个参数必须是数组,一维数组或二维数组
一维数组,如果是3个值,那么中间是作为条件,如:['name', '=', '张三'],俩个值则条件为"="号['name', '张三']
二维数组,可以传入多个值,如:[ ['name', '张三'], ['age', '>', 18] ] //WHERE `name`='张三' AND `age`>18 -
where() 可以传入 $conditionOrValue 和 $value 如:
->where('name', '张三') 或者 ->where('name', '=', '张三') - where() 对 IN 、NOT IN、BETWEEN 、NOT BETWEEN 的支持,用法:
->whereOr($where, $conditionOrValue = null, $value = null)
- 三个参数和->where一样,说说不同的地方
-
如果$where是二维数组,那么前面连接符为AND,数组间的连接符为OR,如:
- 如果传入2到3个参数,那么连接符为 OR ,如:
->likeConcat($field, $concat, $concatValue = [])
- $field 需要模糊查询的字段名
- $concat 例如: $concat = "'%',?,'%'" 需要使用 ? 来做占位符,然后将?对应的数据放到第3个参数里面去
- $concatValue 是数组,存放 $concat 对应的占位符 ? 内容;
->limit($start = 1, $length = null)
- $start 如果在$length为空的情况下,相当于 LIMIT 0,$start,反之即是从第几行开始取数据
- $length 取多少行数据
order($field, $rank = 'ASC')
- string|array $field string例子:->order('id', 'DESC')
- string:default:asc $rank 如果设置为 false ,则可以使用自定义排序:$field = "FIELD('id', 7, 9, 5) ASC"
->group($group)
- $group 字符串或数组,单个字段分组时使用字符串,多个字段分组使用数组
->hvaing($hvaing)
- $hvaing 字符串
->noQuery()
- 使Db类不进行真正的执行,返回sql语句,如:
->insert($array, $columns = [], $filter = false, $type = null)
- $array 必须是一维数组,key是字段,value是插入字段的值
-
$columns 是插入白名单,如果设置了,那么不存在白名单的都会被过滤,如:
- $filter 设置是否自动过滤不存在的字段数据,如:insert($_POST, [], true);
- $type 一般来说无需理会,想了解的可以看源码
- 成功执行返回1,失败0
->insertAll($array, $columns = [], $filter = false, $type = null)
- $array 二维数组,如 [ ['username'=>'张三', 'tel'=>'15210000000'],['username'=>'李四', 'tel'=>'15210000001'] ]
-
其余参数和 insert 一致
- 返回插入条数
::$insertId
->delete($all = false, $type = null)
- 默认无需传参数,防止误删整表数据,如果没有where存在的情况下,delete不会执行,会报错,若要强制删除整表数据,$all传 true 即可
- $type 一般来说无需理会,想了解的可以看源码
- 返回的结果是删除的行数
->update($array, $columns = [], $filter = false, $all = false, $type = null)
- $array 一维数组,需要更新的数据
- $columns 更新白名单,$array 是 $_POST,可能存在其他字段数据,但是不允许被更新的,那么 $columns 应用起来就很方便了
- $filter 和 insert() 中的作用一样
- $all 和 delete() 中的一样,防止不小心整表更新,若要强制删除整表数据,$all 传 true 即可
- $type 一般来说无需理会,想了解的可以看源码
- 返回的结果是更新的行数
->select($field = '*', $more = true)
- $field 是需要查询的字段,默认是所有,即*
- $more 默认为true,查询多行,返回二位数组结果集,设置为false时即为查询单行,即 LIMIT 0,1 返回一维数组结果集
->find($field = '*')
- 注:find 是单行查询,效果等同 ->select($field, false)
- $field 是需要查询的字段,默认是所有,即*
->value($field)
->column($field, $key=false)
- $field 只能是单个字段或者 *
- $key 指定某个字段作为键
->count()
->sum($field)
->avg($field)
->max($field)
->min($field)
::$sqlStr
多数据库分布式
如果都是可读可写的,将信息写在host系列里面去即可,如:
读写分离
某些环境需要直接从写库(主库)中读取数据,如刚进行写操作(插入或更新)时,读库(从库)数据还没同步完成,你可以使用->master(),如:
如果你嫌麻烦,可以配置一个参数:如果某表进行了写操作,本次请求的后续查询操作都会强制使用主库进行查询。
额外说明
该库使用的是 mysqli 模式;
这里说说 mysqli 与 PDO 重要区别。
兼容:mysqli 仅支持 mysql 数据库,PDO 支持大部分数据库,PDO完胜;
性能:本人在 PHP7.3.5 + MYSQL5.7.25 环境测试下:
都是使用预处理模式操作最基本的insert和select,每次循环500次,运行10次计算数据平均值得出结果:
insert下,mysqli 仅比 PDO 快1.59%,基本可忽略。
select下,mysqli 比 PDO 快18.84%
由于PDO要兼容大部分数据库,所以性能上是不及mysqli的
若你的项目是仅使用 mysql 的同时追求毫秒级别的性能优化,那么 mysqli 模式或许更合适你