2017-02-28 18:27:38 +08:00
|
|
|
|
![module info](https://nodei.co/npm/mysqli.png?downloads=true&downloadRank=true&stars=true)
|
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
# mysqli
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 本模块基于 node-mysql 模块二次封装,对基础的增删改查,主从库等按 js 的特点进行
|
|
|
|
|
> 了简化,并对 SQL 注入进行安全过滤,让没有 SQL 基础的人,也能顺利使用 ; 当然,
|
|
|
|
|
> 一些复杂的查询,以及事务等,这些不在我的服务之内,而且会用到这些功能的童鞋,本
|
|
|
|
|
> 身也有一定的 SQL 基础了 ; 所以,这类童鞋,请自行使用各自习惯的 SQL 模块,或手
|
|
|
|
|
> 写实现。
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
## 使用 npm 安装
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
npm install mysqli
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 实例化
|
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 实例化可以传 2 种格式的配置,1 是 json 对象,2 是数组。只有一个数据库时,默认
|
|
|
|
|
> 是主库 ; 多于 1 个数据库服务时,自动以第 1 个为主库,其他的从库,故实例化时
|
|
|
|
|
> ,`注意顺序`。
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
let Mysqli = require('mysqli')
|
|
|
|
|
|
|
|
|
|
//传入json
|
|
|
|
|
let conn = new Mysqli({
|
2017-12-14 16:36:39 +08:00
|
|
|
|
host: '', // IP/域名
|
|
|
|
|
post: 3306, //端口, 默认 3306
|
|
|
|
|
user: '', //用户名
|
|
|
|
|
passwd: '', //密码
|
|
|
|
|
charset: '', // 数据库编码,默认 utf8 【可选】
|
|
|
|
|
db: '' // 可指定数据库,也可以不指定 【可选】
|
|
|
|
|
})
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
|
|
|
|
// 传入数组
|
|
|
|
|
let conn = new Mysqli([
|
2017-12-14 16:36:39 +08:00
|
|
|
|
{
|
|
|
|
|
host: 'host1', // IP/域名
|
|
|
|
|
post: 3306, //端口, 默认 3306
|
|
|
|
|
user: '', //用户名
|
|
|
|
|
passwd: '', //密码
|
|
|
|
|
charset: '', // 数据库编码,默认 utf8 【可选】
|
|
|
|
|
db: '' // 可指定数据库,也可以不指定 【可选】
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
host: 'host2', // IP/域名
|
|
|
|
|
post: 3306, //端口, 默认 3306
|
|
|
|
|
user: '', //用户名
|
|
|
|
|
passwd: '', //密码
|
|
|
|
|
charset: '', // 数据库编码,默认 utf8 【可选】
|
|
|
|
|
db: '' // 可指定数据库,也可以不指定 【可选】
|
|
|
|
|
}
|
|
|
|
|
])
|
2017-02-28 18:27:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
## API 方法
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
|
|
|
|
### 1. escape(val)
|
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 这是`node-mysql`的内部方法,用于进行 SQL 安全过滤,这里只是做了搬运工,把它暴
|
|
|
|
|
> 露出来给外部调用而已。 **这个是静态方法**
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
|
|
|
|
```javascript
|
2017-12-14 16:36:39 +08:00
|
|
|
|
const Mysqli = require('mysqli')
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
Mysqli.escape('这是文本')
|
2017-02-28 18:27:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
### 2. emit(isSlave, dbName)
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
* isSlave `<Boolean>` 可选
|
|
|
|
|
* dbName `<String>` 可选。 如果在实例化连接时 , 已经传入 db, 则这里可不传值。
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 触发一个数据库实例 , 可接受 2 个参数 , 第 1 个为 " 是否从库 ", 第 2 个为 " 数
|
|
|
|
|
> 据库名称 "
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
|
|
|
|
```javascript
|
2017-12-14 16:36:39 +08:00
|
|
|
|
const Mysqli = require('mysqli')
|
|
|
|
|
let conn = new Mysqli({
|
|
|
|
|
/*...*/
|
|
|
|
|
})
|
|
|
|
|
let db = conn.emit(true, 'test')
|
|
|
|
|
```
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
### 3. listDb()
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 顾名思义,该方法即用于列举当前账号权限范围内的所有的数据库名称,返回值是一个数
|
|
|
|
|
> 组 ;
|
|
|
|
|
>
|
|
|
|
|
> **注:**`方法返回的是一个 Promise 对象`
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
```javascript
|
|
|
|
|
db.listDb().then(list => {
|
|
|
|
|
console.log(list)
|
|
|
|
|
})
|
2017-02-28 18:27:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
### 4. listTable()
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 该方法用于列举当前数据库数据表的集合
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
|
|
|
|
```javascript
|
2017-12-14 16:36:39 +08:00
|
|
|
|
db.listTable().then(list => {
|
|
|
|
|
console.log(list)
|
|
|
|
|
})
|
|
|
|
|
```
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
### 5. query(sql)
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
* sql `<String>`
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 该方法用于当内置的方法满足不了需求时,可以自行编写`sql 语句`执行 ; 但要注意防
|
|
|
|
|
> 止`sql 注入`,因为该方法是最基础的方法,模块不对传入的`sql 语句`进行任何的安全
|
|
|
|
|
> 过滤。
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
```javascript
|
2017-02-28 18:27:38 +08:00
|
|
|
|
// 不使用await指令时,返回的是Promise对象
|
2017-12-14 16:36:39 +08:00
|
|
|
|
db.query(`select * from users limit 10`).then(row => {
|
|
|
|
|
console.log(row)
|
|
|
|
|
})
|
2017-02-28 18:27:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
### 6. filter(condition, select)
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
* condition `<Object>`, 查询条件
|
|
|
|
|
* select `<Array>`, 要返回字段 , 默认全部返回
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 该方法用于查询多条数据。无论结果是多少条,返回的都是`数组格式`; 详细请看下面代
|
|
|
|
|
> 码示例:
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
|
|
|
|
```javascript
|
2017-12-14 16:36:39 +08:00
|
|
|
|
db
|
|
|
|
|
.filter(
|
|
|
|
|
{
|
|
|
|
|
table: '', // 要查询的表
|
|
|
|
|
where: [
|
|
|
|
|
{
|
|
|
|
|
//数组格式,可以组成多个条件,默认查询全表 【可选】
|
|
|
|
|
join: 'OR', //条件关系 AND, OR
|
|
|
|
|
op: '>', //关系符,如 =, >, <, <=, >=
|
|
|
|
|
key: 'aa',
|
|
|
|
|
val: 23
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
sort: {
|
|
|
|
|
//排序, key是要排序的字段,value是排序方式, 1顺序,-1逆序 【可选】
|
2017-02-28 18:27:38 +08:00
|
|
|
|
a: 1,
|
|
|
|
|
b: -1
|
2017-12-14 16:36:39 +08:00
|
|
|
|
},
|
|
|
|
|
limit: [0, 1] // 查询范围,可用于分页 【可选】
|
2017-02-28 18:27:38 +08:00
|
|
|
|
},
|
2017-12-14 16:36:39 +08:00
|
|
|
|
['a', 'b']
|
|
|
|
|
)
|
|
|
|
|
.then(row => {
|
|
|
|
|
console.log(row)
|
|
|
|
|
})
|
2017-02-28 18:27:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
### 7. filterOne(condition)
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
* condition `<Object>`
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 该方法与上面的`filter`方法的使用一致,区别只是该方法只返回一条数据,且为`json
|
|
|
|
|
> 格式`。
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
### 8. count(condition)
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
* condition `<Object>`
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 该方法与上面的`filter`方法的使用一致,不过返回的是条目总数 (`<Number>`)
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
### 9. insert(condition, doc)
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
* condition `<Object>`, 插入的条件
|
|
|
|
|
* doc `<Object>`, 插入的数据
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 该方法与上面的`filter`方法的使用类似,手于插入一条数据,具体请看下面代码 ;
|
|
|
|
|
>
|
2017-02-28 18:27:38 +08:00
|
|
|
|
> **注:**`该方法一次只能插入一条数据`
|
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
// 如果主键是自增ID,则结果返回的是 刚插入的数据的自增ID
|
2017-12-14 16:36:39 +08:00
|
|
|
|
db
|
|
|
|
|
.insert(
|
|
|
|
|
{
|
|
|
|
|
table: 'xx'
|
|
|
|
|
},
|
|
|
|
|
{ xx: 1234 } //要插入的数据
|
|
|
|
|
)
|
|
|
|
|
.then(id => {
|
|
|
|
|
console.log(id)
|
|
|
|
|
})
|
2017-02-28 18:27:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
### 10. update(condition, doc)
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
* condition `<Object>`, 条件
|
|
|
|
|
* doc `<Object>`, 数据
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 该方法与上面的`filter`方法的使用类似,用于更新数据,具体请看下面代码 ; `该方法返
|
|
|
|
|
> 回的是被修改的条目数量`
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
// 如果修改成功,则返回被修改的数量
|
2017-12-14 16:36:39 +08:00
|
|
|
|
db
|
|
|
|
|
.update(
|
|
|
|
|
{
|
|
|
|
|
table: 'xx'
|
|
|
|
|
},
|
|
|
|
|
{ xx: 1234 } //要插入的数据
|
|
|
|
|
)
|
|
|
|
|
.then(num => {
|
|
|
|
|
console.log(num)
|
|
|
|
|
})
|
2017-02-28 18:27:38 +08:00
|
|
|
|
```
|
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
### 11. remove(condition)
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
* condition `<Object>`
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
2017-12-14 16:36:39 +08:00
|
|
|
|
> 该方法与上面的`update`方法的使用类似,用于删除指定条件的数据 ; 具体请看下面代码
|
|
|
|
|
> ; `该方法返回的是被删除的条目数量`
|
2017-02-28 18:27:38 +08:00
|
|
|
|
|
|
|
|
|
```javascript
|
|
|
|
|
// 如果修改成功,返回的是被删除的条目数量
|
2017-12-14 16:36:39 +08:00
|
|
|
|
db
|
|
|
|
|
.remove(
|
|
|
|
|
{
|
|
|
|
|
table: 'xx'
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
.then(num => {
|
|
|
|
|
console.log(num)
|
|
|
|
|
})
|
2017-02-28 18:27:38 +08:00
|
|
|
|
```
|