Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql execute 和 query使用

mysql2/promise 中 execute 和 query 的使用最佳实践

作者:清风细雨_林木木

mysql2/promise中,execute使用预处理语句,严格类型检查且防SQL注入,适合频繁执行,query直接拼接SQL,参数绑定更宽松,适用于简单查询,LIMIT/OFFSET在query中不会报错,execute需拼接数字常量,本文给大家介绍mysql2/promise中execute和query的使用,感兴趣的朋友一起看看吧

mysql2/promise 中 execute 和 query 的使用

1.executevsquery

方法原理特点
db.execute()使用 Prepared Statement (预处理语句)参数严格类型检查,性能稳定,防 SQL 注入
db.query()直接拼接 SQL 发送给 MySQL 执行参数绑定更宽松,对 LIMIT/OFFSET 不会类型检查

2. 为什么query可以?

因为 query 方法:

所以,下面代码对 query 来说是可行的:

const sql = `SELECT * FROM dictionary ${searchQuery} ORDER BY id ASC LIMIT ? OFFSET ?`;
const [results] = await db.query(sql, [...searchParams, Number(pageSize), Number(offset)]);

3. 什么时候使用 query?

4. 什么时候使用 execute?

5. 最佳实践

查询数据

const sql = `SELECT * FROM table LIMIT ${Number(limit)} OFFSET ${Number(offset)}`;
const [rows] = await db.execute(sql, params);
// 或者
const [rows] = await db.query(sql, params);

更新/插入

const [result] = await db.execute('INSERT INTO user(name) VALUES(?)', [name]);

总结

queryLIMIT/OFFSET 场景下可直接使用,不会出现 Incorrect arguments to mysqld\_stmt\_execute 错误
如果使用 executeLIMIT/OFFSET 需拼接数字常量

到此这篇关于mysql2/promise 中 execute 和 query 的使用最佳实践的文章就介绍到这了,更多相关mysql execute 和 query使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文