Sobes.tech
Middle — Middle+

Кадом роҳҳо барои шаклгирии дархости SQL SELECT дар вақти воқеӣ бо имконияти тағир додани шароитҳо ва параметрҳо мавҷуданд?

sobes.tech AI

Ҷавоб аз AI

Барои шаклгирии динамикии дархости SQL-роҳбарӣ дар Go чанд роҳ вуҷуд дорад:

  1. Иҷрои пайвастшавии сатрҳо — роҳи соддатарин, аммо бехатар нест, ки ба 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 ё wrappers-и худро барои сохтани дархостҳо истифода баред.