Como isso:
SELECIONE * DA TABELA ONDE A IN (?)
quando eu uso a interface de consulta db.Query (sSql, vArgs ...), hwo para inserir para?
como uma string como esta: "a, b, c"?
ou como uma matriz como esta: [a, b, c]?
ou como uma fatia como esta: ["a", "b", "c"]?
tudo falhou, chore ...
Esta é uma duplicata de # 107.
Isso não vai funcionar.
Um ?
não pode corresponder a nada que altere o plano de execução da instrução depois de preparada.
Aqui estão os casos em que ele não pode ser usado (pode estar incompleto):
Você terá que reescrever sua consulta. Se você sempre tem 3 argumentos, faça-o
SELECT * FROM TABLE WHERE A IN (?, ?, ?)
.
Caso contrário, você deve criar a consulta dependendo do número de elementos de fatia ou procurar outra abordagem.
Oi Arnehormann obrigado pela sua resposta, se usar assim "SELECIONE * DA TABELA ONDE A IN (?,?,?)", Eu tenho que saber quantos para; Mas normalmente eu não sei quantos para existem, então Eu quero usar em uma string de entrada para como este: SELECT * FROM TABLE WHERE A IN (?) e consulta de uma string ou [] string ext.
obrigada
br para você.
@ zhaohui-kevin, a menos que esteja faltando alguma coisa. Você _sempre_ sabe quantos parâmetros existem porque tem que passar argumentos individuais para Query()
ou expandir uma fatia com s...
então apenas construa a consulta com o número correto de marcadores de posição com base nesse conhecimento http : //play.golang.org/p/mA2KwolV-n
Ao ler isso, não tenho certeza se você sabe o que fazer agora ou não.
Se você não souber o número de parâmetros com antecedência, não poderá usar ?
.
Então você precisa fazer algo como
if len(inValues) > 0 {
query = "SELECT * FROM " + table + " WHERE " + column +
" IN (?" + strings.Repeat(",?", len(inValues)-1)) + ")"
....
}
EDITAR Obrigado @DisposaBoy , isso parece bastante familiar: +1:
Sei usar assim, mas não é o que penso :) De qualquer forma muito obrigado.
Em 2013-11-22 19:06:15, "Arne Hormann" [email protected] escreveu:
Ao ler isso, não tenho certeza se você sabe o que fazer agora ou não.
Se você não sabe o número de parâmetros com antecedência, você não pode usar?.
Então você precisa fazer algo como
iflen (inValues)> 0 {query = "SELECT * FROM" + tabela + "WHERE" + coluna + "IN (?" + strings.Repetir (",?", len (inValues) -1)) + ")" .. ..}
-
Responda a este e-mail diretamente ou visualize-o no GitHub.
Comentários muito úteis
Esta é uma duplicata de # 107.
Isso não vai funcionar.
Um
?
não pode corresponder a nada que altere o plano de execução da instrução depois de preparada.Aqui estão os casos em que ele não pode ser usado (pode estar incompleto):
Você terá que reescrever sua consulta. Se você sempre tem 3 argumentos, faça-o
SELECT * FROM TABLE WHERE A IN (?, ?, ?)
.Caso contrário, você deve criar a consulta dependendo do número de elementos de fatia ou procurar outra abordagem.