Sobes.tech
Middle — Middle+

SQL SELECT sorğusunu dinamik olaraq şərtləri və parametrləri dəyişdirmək imkanı ilə canlı şəkildə formalaşdırmaq üçün hansı yanaşmalar mövcuddur?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da dinamik SQL sorğularını yaratmaq üçün bir neçə yanaşma mövcuddur:

  1. Sətirlərin birləşdirilməsi — ən sadə, lakin təhlükəsiz olmayan və SQL injeksiyalarına məruz qalan üsul.

  2. Parametrli sorğuların istifadəsi database/sql paketləri ilə və arqumentləri ? və ya $1 vasitəsilə ötürməklə.

  3. Sorğu qurucuları (query builders) — şərtlər, sıralamalar və s. ilə proqramlaşdırılmış sorğular yaratmağa imkan verən kitabxanalar.

Mastminds/squirrel kitabxanası ilə nümunə:

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()
    // nəticələrin işlənməsi
}

Bu yanaşma şərtləri və parametrləri dinamik şəkildə əlavə etməyə imkan verir və səhvlər və SQL injeksiyalarının qarşısını alır.

Həmçinin ORM və ya öz sarmalayıcılarınızdan istifadə edə bilərsiniz.