node连接mysql以及防注入的手段
Others 2022-10-28 07:39:57 2022-10-28 07:39:57 829 次浏览安装mysql
$ yarn add mysql
建立连接池、常用sql语句
// mysql.js
const mysql = require('mysql');
// 创建连接池
const pool = mysql.createPool({
host: 'xxx.xx.xxx.xxx', // 服务器ip
port: 3306, // mySql运行的端口号(默认3306)
database: 'name', // 数据库名称
user: 'user', // 数据库用户
password: xxxx // 数据库密码
})
const query = (sql, values) => {
return new Promise((resolve, reject) => {
pool.getConnection(function (err, connection) {
if (err) {
reject(err)
} else {
connection.query(sql, values, (err, rows) => {
if (err) {
reject(err)
} else {
resolve(rows)
}
connection.release()
})
}
})
})
}
/**
- 查询数据
- @param {*} table 表名
- @param {*} key 查询条件的Key
- @returns list
*/
const findDataWhere = (table, word, key = 'id') => {
const _sql =
SELECT * FROM ?? WHERE ${key} =?
return query(_sql, [table, word])
}
/**
SELECT * FROM ?? WHERE ${key} =?
return query(_sql, [table, word])
}/**
- 插入数据
- @param {*} table 表名
- @param {*} values 插入的值
- @returns list
*/
const insertData = (table, values) => {
const _sql =
INSERT INTO ?? SET ?
return query(_sql, [table, values]) }
/**
- 更新数据
- @param {*} table 表名
- @param {*} values 插入的值
- @param {*} word 查询条件的值
- @param {*} key 查询条件的Key
- @returns list
*/
const updateData = (table, values, word, key = 'id') => {
const _sql =
UPDATE ?? SET ? WHERE ${key} =?
return query(_sql, [table, values, word]) }
/**
- 删除数据
- @param {*} table 表名
- @param {*} word 查询条件的值
- @param {*} key 查询条件的Key
- @returns
*/
const deleteData = (table, word, key = "id") => {
const _sql =
DELETE FROM ?? WHERE ${key} =?
return query(_sql, [table, word]) } module.exports = { query, insertData, updateData, deleteData, findDataWhere }使用方法
<h4 data-id="heading-3" style="font-size:14px;margin-top:30px;margin-bottom:10px;padding-left:24px;position:relative;color:#00325E;font-family:-apple-system, system-ui, "white-space:normal;background-color:#FFFFFF;">
<span style="font-weight:normal;">
// 控制层 article.js const mySqlFun = require("./mysql") /** * 获取标签列表(id倒序)带分页 */ const findLabelListPage = async (ctx) => { let { pageIndex = 1, pageSize = 10, } = ctx.query let resData = { list: [], pageIndex: pageIndex, pageSize: pageSize, } const _sql = `SELECT * FROM ?? ORDER BY id DESC LIMIT ${(pageIndex - 1) * pageSize},${pageSize} ` // 使用上面导出的query,第一个参数就是sql,第二个参数是数组,?? 和 ? 就是占位符对应的具体表名或参数 let res = await mySqlFun.query(_sql, ['label']) if (res) { ... } else { ... } }
Links: 566