- 使用参数化查询(占位符):
- 使用的库:在Node.js中操作MySQL,常用的库是
mysql2
。
- 安装库:
npm install mysql2
const mysql = require('mysql2');
// 创建连接池
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'test',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
});
// 准备SQL语句,使用占位符
const sql = 'SELECT * FROM users WHERE username =? AND password =?';
const values = ['testUser', 'testPassword'];
pool.query(sql, values, (err, results, fields) => {
if (err) throw err;
console.log(results);
});
- 对输入数据进行严格校验和过滤:
// 假设使用express框架接收输入数据
const express = require('express');
const app = express();
app.use(express.json());
// 模拟校验函数,简单示例,实际应用需更严格
function validateUsername(username) {
return /^[a-zA-Z0-9_]{3,20}$/.test(username);
}
function validatePassword(password) {
return /^.{6,20}$/.test(password);
}
app.post('/login', (req, res) => {
const { username, password } = req.body;
if (!validateUsername(username) ||!validatePassword(password)) {
return res.status(400).send('Invalid input');
}
// 继续执行数据库查询操作
});
- 使用ORM(对象关系映射):
- 使用的库:
Sequelize
是一个流行的ORM库。
- 安装库:
npm install sequelize mysql2
const { Sequelize, DataTypes } = require('sequelize');
// 创建Sequelize实例
const sequelize = new Sequelize('test', 'root', 'password', {
host: 'localhost',
dialect:'mysql'
});
// 定义模型
const User = sequelize.define('user', {
username: DataTypes.STRING,
password: DataTypes.STRING
});
// 查询示例
User.findOne({
where: {
username: 'testUser',
password: 'testPassword'
}
}).then(user => {
console.log(user);
}).catch(err => {
console.error(err);
});