Node + MySQL:如何获取带绑定参数的原始SQL查询语句
获取带绑定参数的最终SQL语句
可以实现,下面提供两种实用方案:
方案一:手动生成带参数的SQL(执行前查看)
借助mysql2内置的format方法,直接将占位符和参数拼接成最终SQL,适合提前验证语句内容:
const mysql = require('mysql2'); const id = 4; const connection = await fastify.mysql.getConnection(); // 生成带参数的SQL const sql = mysql.format(`SELECT age FROM users WHERE id = ?`, [id]); console.log(sql); // 输出: SELECT age FROM users WHERE id = 4 const [rows] = await connection.query(sql); connection.release(); return rows;
注意:你的示例用了:id命名占位符,mysql2默认支持?占位符,若要使用命名占位符,需确保连接配置开启namedPlaceholders: true,此时format方法也支持传入对象参数:
const sql = mysql.format(`SELECT age FROM users WHERE id = :id`, { id: id });
方案二:通过连接日志查看执行的SQL
在fastify-mysql的连接配置中开启日志功能,mysql2会自动输出包含参数的完整SQL语句:
fastify.register(require('@fastify/mysql'), { connectionString: 'mysql://user:pass@localhost/db', namedPlaceholders: true, // 开启debug日志,会输出执行的完整SQL debug: true });
开启后,执行查询时控制台会打印出带实际参数的SQL语句,无需修改业务代码即可查看执行前后的语句内容。
内容的提问来源于stack exchange,提问作者Dally
相关产品推荐
相关产品推荐

