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

 更新时间:2025年08月28日 09:44:23   作者:清风细雨_林木木  
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 方法:

  • 不走 prepare + execute 两阶段过程
  • 而是 一次性发送完整 SQL(即使你用 ? 占位符,也只是 Node.js 侧简单替换后拼接),

所以,下面代码对 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?

  • 语句不需要重复执行、对性能要求不极致时,可用 query,代码更宽容。
  • 如果 LIMITOFFSET 参数会报错,换 query 可以快速解决。

4. 什么时候使用 execute?

  • SQL 需要频繁执行(如同一个查询反复调用),使用 execute 结合 Prepared Statement 可以提升性能。
  • 需要严格防 SQL 注入时,优先 execute,但在 LIMIT/OFFSET 场景需改成拼接数字。

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使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解mysql持久化统计信息

    详解mysql持久化统计信息

    这篇文章主要介绍了mysql持久化统计信息的相关资料,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-12-12
  • SQL group by去重复且按照其他字段排序的操作

    SQL group by去重复且按照其他字段排序的操作

    这篇文章主要介绍了SQL group by去重复且按照其他字段排序的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 解决JDBC的class.forName()问题

    解决JDBC的class.forName()问题

    这篇文章主要介绍了关于JDBC的class.forName()问题,比较两个Java文件可见,连接Db2和连接MySQL的方式非常类似,唯一的区别在于,调用 DriverManager.getConnection() 方法时,传入的URL不同,本文给大家详细讲解,需要的朋友参考下
    2022-09-09
  • 解析SQLite中的常见问题与总结详解

    解析SQLite中的常见问题与总结详解

    本篇文章是对SQLite中的常见问题进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • MySQL8.0与MySQL5.7的区别详解

    MySQL8.0与MySQL5.7的区别详解

    MySQL8.0是2018年4月20日发布的全球最受欢迎的开源数据库的一个非常令人兴奋的新版本,下面这篇文章主要给大家介绍了关于MySQL8.0与MySQL5.7区别的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • MySQL基于DOS命令行登录操作实例(图文说明)

    MySQL基于DOS命令行登录操作实例(图文说明)

    这篇文章主要介绍了MySQL基于DOS命令行登录操作,以图文形式结合实例说明了MySQL登录命令的基本用法,非常简单易懂需要的朋友可以参考下
    2016-01-01
  • mysql myisam 优化设置设置

    mysql myisam 优化设置设置

    mysql myisam 优化设置设置,需要的朋友可以参考下。
    2010-03-03
  • mysql中的group by用法指南

    mysql中的group by用法指南

    MySQL中的GROUP BY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的group by用法,感兴趣的朋友跟随小编一起看看吧
    2025-08-08
  • MySQL查询重复记录和删除重复记录的操作方法

    MySQL查询重复记录和删除重复记录的操作方法

    在MySQL数据库中,有时候会出现重复记录的情况,这可能会导致数据不准确或者不符合业务需求,为了解决这个问题,我们可以使用查询语句来找出重复记录,并使用删除语句来删除这些重复记录,本文给大家介绍了两种操作方法,需要的朋友可以参考下
    2024-12-12
  • mysql中explain用法详解

    mysql中explain用法详解

    EXPLAIN用于SELECT语句中的每个表返回一行信息。表以它们在处理查询过程中将被MySQL读入的顺序被列出
    2013-02-02

最新评论