查询与参数化要点
- 占位符用 ?,参数用数组传,mysql2 自动转义防注入
- SELECT 结果解构成 [rows, fields],rows 才是数据行
- 遍历 rows 拿到每一行对象,字段名就是列名
- LIMIT 控制返回行数,分页查询必备
- execute 走预编译,重复查询用它能省解析开销
- 查不到返回空数组而非报错,记得判空再取值
查询与参数化示例
async function findOrders(userId) {
try {
const [rows] = await promisePool.query(
'SELECT order_id, amount, status FROM orders WHERE user_id = ? ORDER BY created_at DESC LIMIT 20',
[userId]
);
console.log(rows);
return rows;
} catch (e) {
console.error('查询挂了:', e.message);
throw e;
}
}
避坑提醒:别用字符串拼接拼 SQL,哪怕只是个数字 id;一旦混进用户输入,注入漏洞就来了。