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

连接使用MySql

安装MySql模块:

 npm install mysql 

创建连接:

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

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

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

 const mysql = require('mysql')
 
 //创建连接池
 const pool = mysql.createPool({
   host: '127.0.0.1',
   user: 'root',//数据库访问的用户名
   password: '123456',//数据库访问的密码
   port: '3306',//数据库端口号
   database: 'XXX',//数据库名称
 })
 
 const db = {  
    sqlQuery(sql, values) {
     return new Promise((resolve, reject) => {
       pool.getConnection((err, connection) => {
         if (err) {
           reject(err)
         } else {
           if (values) {
             connection.query(sql, values, (err, rows) => {
               if (err) {
                 reject(err)
               } else {
                 resolve(rows)
               }
               connection.release()
             });
           } else {
             connection.query(sql, (err, rows) => {
               if (err) {
                 reject(err)
               } else {
                 resolve(rows)
               }
               connection.release()
             });
           }
         }
       })
     })
   }
 }

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

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

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

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

 

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

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章