栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在具有非IN条件的已准备好的SQL语句中将[]切片传递给IN条件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在具有非IN条件的已准备好的SQL语句中将[]切片传递给IN条件?

准备的语句不能那样工作,至少在我所知的主要DBMS中不行。我的意思是,在Go中,由

database/sql
驱动程序实现的对准备好的语句的支持 应该
使用底层DBMS提供的相应功能(如果驱动程序所接口的DB引擎未提供,则驱动程序可能会选择模拟这种支持)。

现在,在我熟悉的所有DBMS中,prepared语句的整体思想是,它由DB引擎处理 一次
并缓存;这里的“已处理”是指语法检查,编译为某些特定于数据库的内部表示形式,并确定其执行计划。从术语“已编译”开始,语句的 文本
仅被处理一次,然后每次对预处理语句的调用实际上只是告诉服务器“这是我之前提供给您的预处理语句的ID,这是实际的列表。用于包含的占位符的参数”。这就像编译Go程序,然后使用不同的命令行标志连续多次调用它。

因此,您想出的解决方案是正确的:如果您想在调用之间弄乱语句文本,则一定要使用客户端文本操作1,但不要尝试将其结果用作准备好的语句,除非您真的打算多次执行结果文本。

而且可能会更清楚:您最初尝试准备类似

SELECt a, b FROM foo WHERe a IN (?)

据说您尝试为该

IN (?)
占位符提供一组值失败了,因为在那里指定多个值所需的逗号 是语法,而不是值的一部分。

我认为准备类似的东西还是可以的

SELECt a, b FROM foo WHERe a IN (?, ?, ?)

因为它不会违反该规则。并不是说这是您的解决方案……

另见本和本 -学习后者将让你与准备语句直接在MySQL客户端播放。


1一些引擎提供服务器端SQL生成,并随后执行生成的文本。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383385.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号