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) => { /* ... */ });

 

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