Mysql: Usando `?` Con rebanadas

Creado en 22 nov. 2013  ·  5Comentarios  ·  Fuente: go-sql-driver/mysql

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

duplicate question working as intended

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

  • más de un valor (cortes, mapas, ...) : arrow_backward: este es tu error aquí
  • Palabras clave SQL
  • Identificadores SQL (esquemas, tablas y nombres de columnas)
  • Orden de clasificación

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.

Todos 5 comentarios

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

  • más de un valor (cortes, mapas, ...) : arrow_backward: este es tu error aquí
  • Palabras clave SQL
  • Identificadores SQL (esquemas, tablas y nombres de columnas)
  • Orden de clasificación

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.

¿Fue útil esta página
0 / 5 - 0 calificaciones