Ich möchte String als Teil der Abfrage verwenden.Golang Query String als Teil der Abfrage
In der Datenbank.DB habe ich * db.SQL-Instanz.
Wie funktioniert es? Mit diesem Code bekomme ich immer noch "Sie haben einen Fehler in Ihrer SQL-Syntax".
Ich möchte String als Teil der Abfrage verwenden.Golang Query String als Teil der Abfrage
In der Datenbank.DB habe ich * db.SQL-Instanz.
Wie funktioniert es? Mit diesem Code bekomme ich immer noch "Sie haben einen Fehler in Ihrer SQL-Syntax".
Sie können Ihre Abfrage schrittweise erstellen und nur die Argumente hinzufügen, falls erforderlich.
// Build a query (columns and table being strings)
q := fmt.Sprintf("SELECT %s FROM %s", columns, table)
args := []interface{}{}
// Add conditional query/args
if id != 0 {
q = fmt.Sprintf("%s WHERE id=?",q)
args = append(args,id)
}
// Perform the query
database.DB.Query(q,args...)
Wenn Sie sich dabei eine Menge dieser finden, sollten Sie eine kleine Abfrage-Generator zu schreiben, die Sie leicht SQL-Abfragen ohne so viel Aufhebens bauen lassen. Es kann relativ einfach sein, mit Slots für Select, Joins usw. und einem Array für Args.
Platzhalter (?
) sind für Variablen, nicht nur Aussagen.
Sie sollten stattdessen zwei getrennte Fragen haben:
if id != 0 {
database.DB.Query("SELECT name FROM table WHERE id = ?", id)
} else {
database.DB.Query("SELECT name FROM table")
}
Zusätzlich: mit Sprintf("WHERE id = %d", id)
Niederlagen der Zweck der Platzhalter.
Ist es der einzige Weg? Ich habe eine sehr komplizierte Abfrage und möchte keinen Code duplizieren. – nexequ
@nexequ können Sie Ihre Abfragezeichenfolge mit '+' verketten und Argumente in einem Segment mit 'append' sammeln und dann am Ende die Abfrage wie folgt ausführen:' Query (queryString, args ...) '. – mkopriva
@mkopriva danke für den Schnitt, ich habe zur gleichen Zeit bearbeitet und es stieß ich denke. –
ich sah, dass, keine Sorgen;) – mkopriva
Perfekt, wenn Sie einige Beispiel für Ihre einfache Query Builder bekam, würde ich wirklich gerne sehen :) – nexequ