2017-12-30 29 views
1

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

Antwort

4

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.

+0

@mkopriva danke für den Schnitt, ich habe zur gleichen Zeit bearbeitet und es stieß ich denke. –

+0

ich sah, dass, keine Sorgen;) – mkopriva

+0

Perfekt, wenn Sie einige Beispiel für Ihre einfache Query Builder bekam, würde ich wirklich gerne sehen :) – nexequ

1

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.

+0

Ist es der einzige Weg? Ich habe eine sehr komplizierte Abfrage und möchte keinen Code duplizieren. – nexequ

+0

@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

Verwandte Themen