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

链接使用MySql

安装MySql模块:mysql

 npm install mysql sql

建立链接:数据库

 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 都是一个全新的链接,会形成一个资源的极大浪费,下降性能。npm

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

 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 变量一块儿传进值列表中:ui

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) => { /* ... */ });
相关文章
相关标签/搜索