Sobes.tech
Middle — Middle+

Welke benaderingen bestaan er om een SQL SELECT-query ter plekke te vormen met de mogelijkheid om voorwaarden en parameters dynamisch aan te passen?

sobes.tech AI

Antwoord van AI

Voor het dynamisch genereren van SQL SELECT-query's in Go zijn er verschillende benaderingen:

  1. String concatenatie — de eenvoudigste, maar onveilige methode, gevoelig voor SQL-injecties.

  2. Gebruik van geparametreerde queries met pakketten database/sql en het doorgeven van argumenten via ? of $1.

  3. Query builders — bibliotheken die het mogelijk maken om queries programmatisch te vormen met voorwaarden, sorteringen, enz.

Voorbeeld met de bibliotheek Squirrel:

import (
    "github.com/Masterminds/squirrel"
    "database/sql"
    _ "github.com/lib/pq"
)

func buildQuery(age int, active bool) (string, []interface{}, error) {
    qb := squirrel.Select("id", "name").From("users")

    if age > 0 {
        qb = qb.Where(squirrel.Gt{"age": age})
    }
    if active {
        qb = qb.Where(squirrel.Eq{"active": true})
    }

    return qb.ToSql()
}

func main() {
    db, _ := sql.Open("postgres", "connection_string")
    query, args, _ := buildQuery(30, true)
    rows, _ := db.Query(query, args...)
    defer rows.Close()
    // verwerking van resultaten
}

Deze aanpak maakt het mogelijk om voorwaarden en parameters dynamisch toe te voegen, waardoor fouten en SQL-injecties worden voorkomen.

Ook kun je ORM of eigen wrappers gebruiken voor het bouwen van queries.