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) => { /* ... */ });
相關文章
相關標籤/搜索