PHPackages                             lipowei/db - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. lipowei/db

Abandoned → [tcwei/db](/?search=tcwei%2Fdb)Library

lipowei/db
==========

mysql 数据库操作；安全：全程预处理模式防SQL注入，自动添加反引号防表字段与关键词冲突；支持主从分布，支持配置参数保存；

v1.0(5y ago)3181MITPHPPHP &gt;=5.6.0

Since Jun 26Pushed 4mo ago1 watchersCompare

[ Source](https://github.com/ITzhiwei/mysql)[ Packagist](https://packagist.org/packages/lipowei/db)[ RSS](/packages/lipowei-db/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (1)Versions (3)Used By (0)

php mysql 防SQL注入预处理封装库
======================

[](#php-mysql-防sql注入预处理封装库)

版本支持
====

[](#版本支持)

php5.6、7.\*

安装
==

[](#安装)

composer require tcwei/db

使用（支持分布式读写分离，可自动保存配置，无需初始化）
===========================

[](#使用支持分布式读写分离可自动保存配置无需初始化)

引入 vendor 目录下的 autoload.php

```

```

手册
==

[](#手册)

**::transaction($callback, $errorCallback = null)**

```
//事务执行
Db::transaction(function(){
                //写你的业务逻辑代码
               }, function($error){
                 //事务执行失败，在这里你选择是否结束程序执行。若要结束执行exit即可
                 //$error->getMessage(); $error是获取到的 \Exception $error
               });

```

**::table($tableString, $transform = true)**

- $tableString 可以是单个表名，也可以是关联表，例如:
    $tableString = 'users a left join email b on(a.id=b.user\_id)'
    这样 $tableString 就很灵活了，而且不管你怎么写，都会自动加反引号。
- $transform，是否为 $tableString 自动添加反引号。如果你确保自己不需要加反引号，可以设置为 false

**JOIN表相关**

```
所有的表关联都可直接写在 table() 内，可自动识别加反引号，方便快捷，如：
Db::table('article left join article_seo on(article.id=article_seo.article_id)')
Db::table('article inner join article_seo on(article.id=article_seo.article_id)')
Db::table('article right join article_seo on(article.id=article_seo.article_id)')
Db::table('article a left join article_seo b on(a.id=b.article_id) left join users c on(a.user_id=c.id)')

```

**-&gt;where($where, $conditionOrValue = null, $value = null)**

- where() 可以仅接受1个参数，这个参数必须是数组，一维数组或二维数组
    一维数组，如果是3个值，那么中间是作为条件，如：\['name', '=', '张三'\]，俩个值则条件为"="号\['name', '张三'\]
    二维数组，可以传入多个值，如：\[ \['name', '张三'\], \['age', '&gt;', 18\] \] //WHERE `name`='张三' AND `age`&gt;18
- where() 可以传入 $conditionOrValue 和 $value 如：
    -&gt;where('name', '张三') 或者 -&gt;where('name', '=', '张三')
- where() 对 IN 、NOT IN、BETWEEN 、NOT BETWEEN 的支持，用法：

```
  ->where('id', 'IN', [1,2,3,4])       或 ->where([ ['id', 'IN', [1,2,3,4]] ])
  ->where('id', 'NOT IN', [1,2,3,4])   或 ->where([ ['id', 'IN', [1,2,3,4]] ])
  ->where('id', 'BETWEEN', [1,3])      或 ->where([ ['id', 'BETWEEN', [1,3]] ])
  ->where('id', 'NOT BETWEEN', [1,3])  或 ->where([ ['id', 'NOT BETWEEN', [1,3]] ])
  //$where可以是空数组，方便做不确定多条件的查询，如：
  $whereArray = [];
  if(!empty($_POST['age'])){
      $whereArray[] = ['age', '=', $_POST['age']];
  }
  if(!empty($_POST['name'])){
      $whereArray[] = ['name', 'like', $_POST['name']];
  }
  $row = Db::table('users')->where($whereArray)->select();

```

**-&gt;whereOr($where, $conditionOrValue = null, $value = null)**

- 三个参数和-&gt;where一样，说说不同的地方
- 如果$where是二维数组，那么前面连接符为AND，数组间的连接符为OR，如：

```
// WHERE `sex`='男' AND (`name`='张三' OR `age`>18 OR `name`='李四')
->where('sex', '男')->whereOr([ ['name', '张三'], ['age', '>', 18], ['name', '李四'] ])

```

- 如果传入2到3个参数，那么连接符为 OR ，如：

```
// WHERE `sex`='男' OR `name`='张三'
->where('sex', '男')->whereOr('name', '张三')

```

```
whereOr 选择二维数组和2到3个参数的组合，可以拼出任意OR AND条件语句

```

**-&gt;likeConcat($field, $concat, $concatValue = \[\])**

- $field 需要模糊查询的字段名
- $concat 例如： $concat = "'%',?,'%'" 需要使用 ? 来做占位符，然后将?对应的数据放到第3个参数里面去
- $concatValue 是数组，存放 $concat 对应的占位符 ? 内容；

```
->likeConcat('content', "'%',?,'%'", [$_POST['search']]);作用是防止需要模糊查询的内容里面包含 ? _ 这些特殊字符

```

**-&gt;limit($start = 1, $length = null)**

- $start 如果在$length为空的情况下，相当于 LIMIT 0,$start，反之即是从第几行开始取数据
- $length 取多少行数据

**order($field, $rank = 'ASC')**

- string|array $field string例子：-&gt;order('id', 'DESC')
- string:default:asc $rank 如果设置为 false ,则可以使用自定义排序：$field = "FIELD('id', 7, 9, 5) ASC"

```
//字符串模式例子
->order('time', 'desc');
//数组模式例子
DESC：
->order(['time'=>'desc']) 或者 ->order(['time'], 'DESC')
->order(['time'=>'desc'， 'id'=>'desc']) 或者 ->order(['time', 'id'], 'DESC')
ASC：
->order(['time']) 效果： time ASC
->order(['time'， 'id']) 效果： time ASC,id ASC

```

**-&gt;group($group)**

- $group 字符串或数组，单个字段分组时使用字符串，多个字段分组使用数组

**-&gt;hvaing($hvaing)**

- $hvaing 字符串

**-&gt;noQuery()**

- 使Db类不进行真正的执行，返回sql语句，如：

```
$res = Db::table('article')->noQuery()->where(['id', 'where('id', 1)->update(['name' => 'tcwei']);
$name = Db::table('users')->master()->where('id', 1)->value('name');

```

如果你嫌麻烦，可以配置一个参数：如果某表进行了写操作，本次请求的后续查询操作都会强制使用主库进行查询。

```
'readSelectMaster' => true

```

额外说明
====

[](#额外说明)

该库使用的是 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 模式或许更合适你

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance52

Moderate activity, may be stable

Popularity11

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity51

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2149d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/64b02e6dd1c2046465a92a43050180747375fed27151c08abc2a336d83968d92?d=identicon)[ITwuzhiwei](/maintainers/ITwuzhiwei)

---

Top Contributors

[![ITzhiwei](https://avatars.githubusercontent.com/u/31977386?v=4)](https://github.com/ITzhiwei "ITzhiwei (37 commits)")

### Embed Badge

![Health badge](/badges/lipowei-db/health.svg)

```
[![Health](https://phpackages.com/badges/lipowei-db/health.svg)](https://phpackages.com/packages/lipowei-db)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
