Sobes.tech
Middle — Middle+

რა მიდგომებია SQL SELECT სავალდებულო შეკვეთის ფორმირებისთვის რეალურ დროში, სადაც შესაძლებელია პირობებისა და პარამეტრების დინამიური ცვლილება?

sobes.tech AI

პასუხი AI-სგან

Go-ში დინამიური SQL-საკითხების შექმნისთვის არსებობს რამდენიმე მიდგომა:

  1. სტრიქონების კონკატენაცია — ყველაზე მარტივი, მაგრამ არასაიმედო მეთოდი, რომელიც susceptible არის SQL ინექციებს.

  2. პარამეტრიზებული შეკითხვების გამოყენება database/sql პაკეტებით და არგუმენტების გადაცემა ? ან $1 მეშვეობით.

  3. საკითხების შემქმნელები (query builders) — ბიბლიოთეკები, რომლებიც საშუალებას აძლევენ პროგრამულად შექმნათ შეკითხვები პირობებით, სორტირებებით და ა.შ.

მაგალითი 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()
    // შედეგების დამუშავება
}

ეს მიდგომა საშუალებას აძლევს დინამიურად დაამატოთ პირობები და პარამეტრები, თავიდან აიცილოთ შეცდომები და SQL ინექციები.

ასევე შეგიძლიათ გამოიყენოთ ORM ან საკუთარი wrapper-ები შეკითხვების დასამზადებლად.