回答

收藏

Golang SQL查询变量替代

技术问答 技术问答 261 人阅读 | 0 人回复 | 2023-09-14

我有需要变量替换以更好地使用Go-kit服务的sql查询。* {# {/ w: S8 o1 W# {
我有dep&org作为用户输入的内容,这是我的休息服务的一部分,例如:dep = 'abc'和org = 'def'。
7 X0 X/ Q4 b; k1 I7 S我已经尝试了一些事情,例如:# w; {3 n& h$ `2 M* k# \
rows, err := db.Query(1 n1 |9 y$ _2 l7 n, u
    "select name from table where department='&dep' and organisation='&org'",, j7 p* g# Q9 z: Z" _
)
, ^  H* Y$ {- a) v和:- X( N6 n5 ]4 G9 F) X& K
rows, err := db.Query(# H# |$ F* d0 n# r7 K
    "select name from table where department=? and organisation=?", dep , org,
; }7 ~2 _( M4 g- q4 B6 Y)  `* c* b% L+ G( L! v5 H+ K
导致错误: sql: statement expects 0 inputs; got 2& U5 i, d' l0 W7 m3 B
仅硬编码的值有效,替换失败。* Y# S6 L, p1 O' b+ L
我没有从Oracle博客那里找到很多有关此方面的帮助,并且想知道是否有任何方法可以解决此问题。
& c5 }# T  r/ E/ \0 v9 L. m                  W. K7 B% v) V0 _" S9 d0 b
解决方案:
+ @6 @& p0 ^: u% N               
1 _& i1 n; b# A; B) E( P
: |0 _4 R2 V: h5 y: G; \" `& D" b" p+ J+ S
                参数占位符语法(参考:http : //go-database-
: D1 |/ g8 R  E# T6 t" Usql.org/prepared.html)
& |: m4 N  P+ `, O" ~
" X7 m- P* Q- E准备好的语句中占位符参数的语法是特定于数据库的。例如,比较MySQL,PostgreSQL和Oracle:
3 `) B4 z7 f. X7 w1 R( c2 C9 t1 U9 u# p9 i% l( A  A
MySQL               PostgreSQL            Oracle! v6 E/ q) R( h  b+ \7 E" M# a
=====               ==========            ======
  b5 X4 o2 `4 G& g* g: ~7 J5 Y; MWHERE col = ?       WHERE col = $1        WHERE col = :col ( ]7 o6 J  w9 z8 T+ a: e
VALUES(?, ?, ?)     VALUES($1, $2, $3)    VALUES(:val1, :val2, :val3)
9 U! {& d% Y* ?2 T0 j$ p/ M对于oracle,您需要使用:dep,:org作为占位符。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则