2016-06-02 1 views
1

Ich habe ein sehr ähnliches Problem here gesehen, aber ich bin nicht sicher, was die Rohre in den Befehl tun, und es hat nicht funktioniert für mich sowieso.Was ist los mit meiner Postgres-Abfrage innerhalb von Golang (LIKE übereinstimmend)

Also, hier ist der Code, den ich ausprobiert habe.

rows, err := db.Query(fmt.Sprintf("SELECT * FROM mytable WHERE mycolumn LIKE 'camel.%'")) 

Und obwohl, ich habe keine Ahnung, wofür es ist, habe ich auch mit den Rohren versucht.

rows, err := db.Query(fmt.Sprintf("SELECT * FROM mytable WHERE mycolumn LIKE 'camel. || %'")) 

Also, was es tun soll, wird in dieser Spalte alles passend, die mit Kamel beginnt., So camel.*

Der Fehler Ich bin für beide Beispiele bekommen ist

pq: syntax error at or near "(" 

Also rate ich aus irgendeinem Grund, dass es mehr von dieser Linie als der Befehl übergibt, als ich möchte .... vielleicht ein Zitat Problem? Ich habe ein paar andere Dinge ausprobiert, aber nichts hat funktioniert. Jede Hilfe wird geschätzt.

+0

Können wir eine Ahnung testen? Probieren Sie: 'rows, err: = db.Query (\ 'SELECT * FROM meineTabelle WHERE meineSäule LIKE' camel.% ') Und sehen, ob das besser funktioniert – Snowman

+0

Gleicher Fehler, aber danke für einen Blick :) – trueCamelType

Antwort

5

func Sprintf(format string, a ...interface{}) string

Sprintf Formate entsprechend einem Format-Spezifizierer und gibt die resultierende Zeichenfolge.

mt.Println(fmt.Sprintf("SELECT * FROM mytable WHERE mycolumn LIKE 'camel%'")) 

//Output: 
//SELECT * FROM mytable WHERE mycolumn LIKE 'camel%!'(MISSING) 
//Ofc postgres will complain 

Sie brauchen nicht fmt.Sprintf in diesem Fall.

rows, err := db.Query("SELECT * FROM mytable WHERE mycolumn LIKE 'camel.%'") 

funktioniert gut.

Aber wenn Sie wirklich brauchen fmt.Sprintf verwenden Sie entkommen muss ‚%‘ mit ‚%%‘

rows, err := db.Query(fmt.Sprintf("SELECT * FROM mytable WHERE mycolumn LIKE 'camel.%%'")) 
+0

Wann Ich benutze eines dieser Beispiele, ich bekomme '' 'pq: operator existiert nicht: inet ~~ unknown'''. Als ich diesen Fehler jetzt untersuchte, dachte ich, ich würde zuerst antworten. – trueCamelType

+0

ok, ich musste cast '' 'mycolumn''' eingeben. So ändern Sie die Abfrage in '' 'SELECT * FROM meineTabelle WHERE meinSpalte :: text LIKE 'camel.%'' '' ' – trueCamelType

+1

Komm schon ... Verwenden Sie keine Formatierung zum Erstellen einer Abfragezeichenfolge! Rückblenden der alten Zeiten von SQL Injection kommen uns zurück. Verwenden Sie die Parameterzuweisungen Ihres SQL-Pakets beim Ausführen der Abfrage, damit sie ordnungsgemäß maskiert sind. 'rows, err: = db.Query (" SELECT * FROM meine Tabelle WO meine Spalte LIKE (?) "," camel.% ")' – eduncan911