news 2026/5/10 12:14:21

【MYSQL】字符串拼接和参数化sql语句区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【MYSQL】字符串拼接和参数化sql语句区别

总结:

参数化不是为了复用查询结果,
而是为了固定 SQL 结构,让解析和执行行为可预测;
同时通过语义隔离彻底消除 SQL 注入。

字符串拼接:

varids=string.Join(",",idList);varsql=$@" SELECT * FROM a WHERE a.id IN ({ids}); ";//生成sql可能是SELECT*FROM a WHEREa.idIN(1,2,3,4,5,6,7,8,9,...);

参数化sql:

varparameters=newList<MySqlParameter>();varplaceholders=newList<string>();for(inti=0;i<idList.Count;i++){varname=$"@id{i}";placeholders.Add(name);parameters.Add(newMySqlParameter(name,idList[i]));}varsql=$@" SELECT * FROM a WHERE a.id IN ({string.Join(",",placeholders)}); ";//生成固态sqlSELECT*FROM a WHEREa.idIN(@id0,@id1,@id2,...);

在代码层面,虽然每次调用都是不同的sql,但是对于mysql数据库来说完全不一样。
上面给出的两个代码注释下面就是数据库接收到的sql模式,可以看到,参数化每次数据库接收的都是一样的。因此参数化让数据库能够 复用 解析结构和执行计划,从而减少解析与优化的开销。而拼接字符串每次都是不同的sql语句,需要重新解析。
另外拼接字符串会有注入的风险,但是参数化不会有。因为数据库在解析阶段只确认“占位符的位置和类型”,并不会把参数值当成 SQL 语法来解析。
举个例子说明:
这是字符串拼接

sql="WHERE id IN ("+userInput+")";//如果用户输入1)OR1=1--//最终sql是WHEREidIN(1)OR1=1--)

参数化

WHEREidIN(?)//输入1)OR1=1--//数据库看到id="1) OR 1=1 --"

数据库处理流程是:
1.先解析 SQL 结构
2.确认:? 是一个“值占位符”
3.SQL 语法树已经固定
4.再把参数值“绑定”为数据

完结撒花~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 9:01:19

5分钟彻底搞定TranslucentTB中文显示:从诊断到永久解决

5分钟彻底搞定TranslucentTB中文显示&#xff1a;从诊断到永久解决 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 还在为TranslucentTB界…

作者头像 李华
网站建设 2026/5/2 3:47:16

旧设备焕新生的终极指南:让老Mac重获现代系统体验

旧设备焕新生的终极指南&#xff1a;让老Mac重获现代系统体验 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为老旧的Mac设备无法升级最新系统而烦恼吗&#xff1f;&…

作者头像 李华
网站建设 2026/5/10 1:35:01

未来趋势预测:LobeChat在AIGC生态中的定位

LobeChat&#xff1a;AIGC时代下的智能对话前端新范式 在AI生成内容&#xff08;AIGC&#xff09;浪潮席卷全球的今天&#xff0c;大语言模型的能力边界正以惊人的速度拓展。从撰写法律文书到编写复杂代码&#xff0c;从创作剧本到辅助科研&#xff0c;LLM似乎无所不能。但一个…

作者头像 李华
网站建设 2026/5/1 9:11:53

Wallpaper_Engine:开源壁纸下载神器的终极使用指南

Wallpaper_Engine&#xff1a;开源壁纸下载神器的终极使用指南 【免费下载链接】Wallpaper_Engine 一个便捷的创意工坊下载器 项目地址: https://gitcode.com/gh_mirrors/wa/Wallpaper_Engine 你是否曾为寻找独特的动态壁纸而烦恼&#xff1f;Wallpaper_Engine开源项目为…

作者头像 李华
网站建设 2026/5/9 17:34:14

TranslucentTB中文界面终极配置指南:告别英文烦恼的3大方法

TranslucentTB中文界面终极配置指南&#xff1a;告别英文烦恼的3大方法 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你知道吗&#xf…

作者头像 李华