在Rust中使用mysql crate时,如何查看插值后的MySQL查询以调试?
打印参数化查询的完整SQL语句方法
因为你用的是参数化查询,mysql crate不会在客户端拼接出完整的插值SQL(这也是参数化查询防SQL注入的核心),但可以通过以下几种方式拿到可在mysql控制台测试的语句:
手动替换参数:如果参数数量少,直接把查询语句里的占位符(比如
:age)替换成对应的值,生成完整SQL。比如你的例子可以写成:SELECT NAME from MY_TABLE where VALUE=2;开启MySQL通用查询日志:
- 登录mysql控制台,执行开启日志的命令:
SET GLOBAL general_log = 'ON'; - 运行你的Rust代码执行查询。
- 查看MySQL的通用日志文件(路径可通过
SHOW VARIABLES LIKE 'general_log_file';查询),日志里会记录服务器实际执行的完整语句。 - 测试完成后记得关闭日志:
SET GLOBAL general_log = 'OFF';
- 登录mysql控制台,执行开启日志的命令:
启用mysql crate的调试日志:
- 在你的Cargo.toml中确保依赖了
log和env_logger。 - 运行程序时设置环境变量开启debug日志:
RUST_LOG=mysql=debug cargo run - 控制台输出的日志里会包含预处理的查询语句和对应的参数值,你可以根据这些信息手动拼接出完整的SQL语句。
- 在你的Cargo.toml中确保依赖了
内容的提问来源于stack exchange,提问作者FabienM
相关产品推荐
相关产品推荐

