Mysql: 对切​​片使用`?`

创建于 2013-11-22  ·  5评论  ·  资料来源: go-sql-driver/mysql

像这样:
在表中选择*(?)

当我使用查询接口db.Query(sSql,vArgs ...),hwo输入para时?
像这样的字符串:“ a,b,c”?
还是像这样的数组:[a,b,c]?
或像这样的切片:[“ a”,“ b”,“ c”]?

那都失败了,哭了...

duplicate question working as intended

最有用的评论

这是#107的重复项。

那行不通。

准备后, ?不能匹配任何更改语句执行计划的内容。
这是无法使用的情况(可能不完整):

  • 多个值(切片,地图等) :arrow_backward:这是您的错误
  • SQL关键字
  • SQL标识符(模式,表和列名)
  • 排序

您将不得不重写查询。 如果您始终有3个参数,请输入
SELECT * FROM TABLE WHERE A IN (?, ?, ?)
如果不是,则必须根据slice元素的数量创建查询或寻找其他方法。

所有5条评论

这是#107的重复项。

那行不通。

准备后, ?不能匹配任何更改语句执行计划的内容。
这是无法使用的情况(可能不完整):

  • 多个值(切片,地图等) :arrow_backward:这是您的错误
  • SQL关键字
  • SQL标识符(模式,表和列名)
  • 排序

您将不得不重写查询。 如果您始终有3个参数,请输入
SELECT * FROM TABLE WHERE A IN (?, ?, ?)
如果不是,则必须根据slice元素的数量创建查询或寻找其他方法。

嗨Arnehormann谢谢您的回答,如果使用这样的“ SELECT * FROM TABLE WHERE A IN(?,?,?)”,我必须知道有多少个para;但是通常我不知道有多少para,所以我想在这样的字符串输入参数中使用:SELECT * FROM TABLE WHERE A IN(?),并从字符串或[] string ext查询。

谢谢你
br为您。

@ zhaohui-kevin,除非我错过了什么。 你_always_知道有多少PARAMS有,因为你必须要么通过个人args设置为Query()或扩大与片s...所以只是构造查询基于知识的正确数量的占位符的HTTP ://play.golang.org/p/mA2KwolV-n

通过阅读本文,我不确定您是否知道现在该做什么。
如果您不预先知道参数的数量,则不能使用?

所以你需要做类似的事情

if len(inValues) > 0 {
    query = "SELECT * FROM " + table + " WHERE " + column +
        " IN (?" + strings.Repeat(",?", len(inValues)-1)) + ")"
    ....
}

编辑谢谢@DisposaBoy ,看起来很熟悉:+1:

我知道如何这样使用,但这不是我的主意:)非常感谢。

在2013-11-22 19:06:15,“ Arne Hormann” [email protected]写道:

通过阅读本文,我不确定您是否知道现在该做什么。
如果您事先不知道参数的数量,则不能使用?。

所以你需要做类似的事情

iflen(inValues)> 0 {query =“ SELECT * FROM” + table +“其中” + column +“ IN(?” + strings.Repeat(“,?”,len(inValues)-1))+“)”。 ..}

-
直接回复此电子邮件或在GitHub上查看。

此页面是否有帮助?
0 / 5 - 0 等级