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