Mysql: Usando `?` Com fatias

Criado em 22 nov. 2013  ·  5Comentários  ·  Fonte: go-sql-driver/mysql

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 ...

duplicate question working as intended

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):

  • mais de um valor (fatias, mapas, ...) : arrow_backward: este é o seu erro aqui
  • Palavras-chave SQL
  • Identificadores SQL (nomes de esquema, tabela e coluna)
  • ordem de classificação

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.

Todos 5 comentários

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):

  • mais de um valor (fatias, mapas, ...) : arrow_backward: este é o seu erro aqui
  • Palavras-chave SQL
  • Identificadores SQL (nomes de esquema, tabela e coluna)
  • ordem de classificação

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.

Esta página foi útil?
0 / 5 - 0 avaliações