Node.js入门教程 第六篇 (连接使用MySql)

连接使用MySql

安装MySql模块:

 npm install mysql 

创建连接:

 1 const mysql = require('mysql')
 2 
 3 // 连接 mysql 服务器
 4 const connection = mysql.createConnection({
 5   host: '127.0.0.1',
 6   user: 'root',//数据库访问的用户名
 7   password: '123456',//数据库访问的密码
 8   port: '3306',//数据库端口号
 9   database: 'XXX',//数据库名称
10 })
11 // 执行SQL
12 connection.query(sql, function (err, result) {
13   err // 错误信息
14   result // 结果
15 })
16 // 销毁连接 | 由于 JS 是异步的,所以当前代码会在执行 SQL 之前就销毁了连接
17 connection.destroy()

用 createConnection 创建 Mysql 连接,每执行一次 connection.query 都是一个全新的连接,会造成一个资源的极大浪费,降低性能。

连接池是另外的一种执行方法,它一次性的创建了多个连接,然后根据客户端的查询,自动的 分发、复用、管理 这些连接。

 1 const mysql = require('mysql')
 2 
 3 //创建连接池
 4 const pool = mysql.createPool({
 5   host: '127.0.0.1',
 6   user: 'root',//数据库访问的用户名
 7   password: '123456',//数据库访问的密码
 8   port: '3306',//数据库端口号
 9   database: 'XXX',//数据库名称
10 })
11 
12 const db = {  
13    sqlQuery(sql, values) {
14     return new Promise((resolve, reject) => {
15       pool.getConnection((err, connection) => {
16         if (err) {
17           reject(err)
18         } else {
19           if (values) {
20             connection.query(sql, values, (err, rows) => {
21               if (err) {
22                 reject(err)
23               } else {
24                 resolve(rows)
25               }
26               connection.release()
27             });
28           } else {
29             connection.query(sql, (err, rows) => {
30               if (err) {
31                 reject(err)
32               } else {
33                 resolve(rows)
34               }
35               connection.release()
36             });
37           }
38         }
39       })
40     })
41   }
42 }

MySql查询变量用一个 ?号 作为占位符(防止SQL注入):

1 var query = 'UPDATE users SET foo = ?, bar = ?, baz = ? WHERE id = ?',
2     value = ['a', 'b', 'c', userId];
3 connection.query(query, value, (error, results, fields) => { /* ... */ });

第一个参数 query 是一个字符串,是查询的 sql 语句,含有占位符。

第二个参数 value 是一个数组,含有所有占位符的值。

 

标识符(数据库、表、列名)用两个 ?号 做占位符(即 ?? ),除此之外,可以将标识符的名字当成 query 变量一起传进值列表中:

1 var query = 'UPDATE ?? SET foo = ?, bar = ?, baz = ? WHERE id = ?',
2     value = ['users', 'a', 'b', 'c', userId];
3 connection.query(query, value, (error, results, fields) => { /* ... */ });

 

posted @ 2019-10-10 09:53  Hi-Jimmy  阅读(452)  评论(0编辑  收藏  举报