Mysql: Verwenden von `?` Mit Slices

Erstellt am 22. Nov. 2013  ·  5Kommentare  ·  Quelle: go-sql-driver/mysql

So was:
SELECT * FROM TABLE WHERE A IN (?)

Wenn ich die Abfrageschnittstelle db.Query (sSql, vArgs ...) verwende, hwo, um para einzugeben?
als Zeichenfolge wie diese: "a, b, c"?
oder als Array wie folgt: [a, b, c]?
oder als eine Scheibe wie diese: ["a", "b", "c"]?

das ist alles gescheitert, weine ...

duplicate question working as intended

Hilfreichster Kommentar

Dies ist ein Duplikat von # 107.

Das wird nicht funktionieren.

Ein ? kann mit nichts übereinstimmen, was den Ausführungsplan der Anweisung nach ihrer Vorbereitung ändert.
Hier sind die Fälle, für die es nicht verwendet werden kann (möglicherweise unvollständig ist):

  • mehr als ein Wert (Slices, Maps, ...) : arrow_backward: Dies ist Ihr Fehler hier
  • SQL-Schlüsselwörter
  • SQL-Bezeichner (Schema-, Tabellen- und Spaltennamen)
  • Sortierung

Sie müssen Ihre Abfrage neu schreiben. Wenn Sie immer 3 Argumente haben, machen Sie es
SELECT * FROM TABLE WHERE A IN (?, ?, ?) .
Wenn nicht, müssen Sie die Abfrage abhängig von der Anzahl der Slice-Elemente erstellen oder nach einem anderen Ansatz suchen.

Alle 5 Kommentare

Dies ist ein Duplikat von # 107.

Das wird nicht funktionieren.

Ein ? kann mit nichts übereinstimmen, was den Ausführungsplan der Anweisung nach ihrer Vorbereitung ändert.
Hier sind die Fälle, für die es nicht verwendet werden kann (möglicherweise unvollständig ist):

  • mehr als ein Wert (Slices, Maps, ...) : arrow_backward: Dies ist Ihr Fehler hier
  • SQL-Schlüsselwörter
  • SQL-Bezeichner (Schema-, Tabellen- und Spaltennamen)
  • Sortierung

Sie müssen Ihre Abfrage neu schreiben. Wenn Sie immer 3 Argumente haben, machen Sie es
SELECT * FROM TABLE WHERE A IN (?, ?, ?) .
Wenn nicht, müssen Sie die Abfrage abhängig von der Anzahl der Slice-Elemente erstellen oder nach einem anderen Ansatz suchen.

Hallo Arnehormann, danke für deine Antwort. Wenn du so "SELECT * FROM TABLE WHERE A IN (?,?,?)" Verwendest, muss ich wissen, wie viele Para es gibt. Aber normalerweise weiß ich nicht, wie viele Para es gibt Ich möchte in einer Zeichenfolge Eingabe wie folgt verwenden: SELECT * FROM TABLE WHERE A IN (?) und Abfrage von einer Zeichenfolge oder [] Zeichenfolge ext.

Danke
br für u.

@ Zhaohui-Kevin, es sei denn, ich vermisse etwas. Sie wissen immer, wie viele Parameter es gibt, weil Sie entweder einzelne Argumente an Query() oder ein Slice mit s... erweitern müssen. Erstellen Sie also einfach die Abfrage mit der richtigen Anzahl von Platzhaltern basierend auf diesem Wissen http : //play.golang.org/p/mA2KwolV-n

Nach dem Lesen bin ich mir nicht sicher, ob Sie wissen, was Sie jetzt tun sollen oder nicht.
Wenn Sie die Anzahl der Parameter nicht im Voraus kennen, können Sie ? .

Sie müssen also so etwas tun

if len(inValues) > 0 {
    query = "SELECT * FROM " + table + " WHERE " + column +
        " IN (?" + strings.Repeat(",?", len(inValues)-1)) + ")"
    ....
}

EDIT Dank @DisposaBoy, das sieht eher vertraut: +1:

Ich weiß, wie man so benutzt, aber das ist nicht mein Verstand :) Wie auch immer, vielen Dank.

Am 22.11.2013 um 19:06:15 schrieb "Arne Hormann" [email protected] :

Nach dem Lesen bin ich mir nicht sicher, ob Sie wissen, was Sie jetzt tun sollen oder nicht.
Wenn Sie die Anzahl der Parameter nicht im Voraus kennen, können Sie? Nicht verwenden?

Sie müssen also so etwas tun

iflen (inValues)> 0 {query = "SELECT * FROM" + table + "WHERE" + column + "IN (?" + strings.Repeat (",?", len (inValues) -1)) + ")" .. ..}

- -
Antworte direkt auf diese E-Mail oder sieh sie dir auf GitHub an.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen