Como esto:
SELECCIONAR * DE LA TABLA DONDE A IN (?)
cuando uso la interfaz de consulta db.Query (sSql, vArgs ...), ¿cómo ingresar para?
como una cadena como esta: "a, b, c"?
o como una matriz como esta: [a, b, c]?
o como una porción como esta: ["a", "b", "c"]?
todo eso ha fallado, llora ...
Este es un duplicado del # 107.
Eso no funcionará.
Un ?
no puede coincidir con nada que cambie el plan de ejecución de la declaración después de que se haya preparado.
Este es el caso para el que no se puede usar (puede estar incompleto):
Tendrá que volver a escribir su consulta. Si siempre tiene 3 argumentos, conviértalo
SELECT * FROM TABLE WHERE A IN (?, ?, ?)
.
De lo contrario, debe crear la consulta en función de la cantidad de elementos de corte o buscar otro enfoque.
Hola Arnehormann gracias por tu respuesta, si utilizas así "SELECT * FROM TABLE WHERE A IN (?,?,?)", Tengo que saber cuantos para; pero normalmente no sé cuantos para hay, entonces quiero usar en un parámetro de entrada de cadena como este: SELECT * FROM TABLE WHERE A IN (?), y consulta desde una cadena o [] string ext.
gracias
br para ti.
@ zhaohui-kevin, a menos que me esté perdiendo algo. Usted _siempre_ sabe cuántos parámetros hay porque tiene que pasar argumentos individuales a Query()
o expandir un segmento con s...
así que simplemente construya la consulta con el número correcto de marcadores de posición basándose en ese conocimiento http : //play.golang.org/p/mA2KwolV-n
Al leer esto, no estoy seguro de si sabes qué hacer ahora o no.
Si no conoce la cantidad de parámetros de antemano, no puede usar ?
.
Entonces necesitas hacer algo como
if len(inValues) > 0 {
query = "SELECT * FROM " + table + " WHERE " + column +
" IN (?" + strings.Repeat(",?", len(inValues)-1)) + ")"
....
}
EDITAR Gracias @DisposaBoy , eso parece bastante familiar: +1:
Sé cómo usarlo así, pero esa no es mi mente :) De todas formas muchas gracias.
En 2013-11-22 19:06:15, "Arne Hormann" [email protected] escribió:
Al leer esto, no estoy seguro de si sabes qué hacer ahora o no.
Si no conoce la cantidad de parámetros de antemano, no puede usar ?.
Entonces necesitas hacer algo como
iflen (inValues)> 0 {query = "SELECT * FROM" + table + "WHERE" + column + "IN (?" + strings.Repeat (",?", len (inValues) -1)) + ")" .. ..}
-
Responda a este correo electrónico directamente o véalo en GitHub.
Comentario más útil
Este es un duplicado del # 107.
Eso no funcionará.
Un
?
no puede coincidir con nada que cambie el plan de ejecución de la declaración después de que se haya preparado.Este es el caso para el que no se puede usar (puede estar incompleto):
Tendrá que volver a escribir su consulta. Si siempre tiene 3 argumentos, conviértalo
SELECT * FROM TABLE WHERE A IN (?, ?, ?)
.De lo contrario, debe crear la consulta en función de la cantidad de elementos de corte o buscar otro enfoque.