Pular para o conteúdo

29 · Banco de Dados

Consultas Parametrizadas

Usar ? + array de bindings para passar valores externos com segurança.

Nesta página

Sempre que um valor externo (entrada do usuário, variável de programa) precisar entrar numa query, use parâmetros posicionais em vez de concatenação de strings. Cada ? no SQL é substituído, em ordem, pelo elemento correspondente do array de bindings passado como segundo argumento de execute ou query.

Isso tem dois benefícios: protege contra SQL injection e permite que o driver reutilize o plano de execução da query em chamadas repetidas.

Insere usuários com ? e filtra por idade mínima — os valores nunca tocam o texto SQL.

04-parameterized.zolo
Playground
// Feature: Database — parameterized queries (`?` + bindings array)

// Syntax: `db.query(sql, [v1, v2, ...])` and `db.execute(sql, [...])`

// When to use: ALWAYS when SQL receives external values. Prevents SQL

// injection and lets the driver cache the query plan.


use std::database::Database

let db = Database.open("sqlite://:memory:").unwrap()
defer db.close()

db.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)").unwrap()

// `?` in order; the bind array fills it in.

db.execute("INSERT INTO users (id, name, age) VALUES (?, ?, ?)", [1, "Ana", 30]).unwrap()
db.execute("INSERT INTO users (id, name, age) VALUES (?, ?, ?)", [2, "Bruno", 25]).unwrap()
db.execute("INSERT INTO users (id, name, age) VALUES (?, ?, ?)", [3, "Carla", 40]).unwrap()

const min_age = 28
let rows = db.query("SELECT name, age FROM users WHERE age >= ? ORDER BY age", [min_age]).unwrap()

print("users aged {min_age}+:")
for row in rows {
  print("  {row.name} ({row.age})")
}
// expected:

//   users aged 28+:

//     Ana (30)

//     Carla (40)

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

Desafio

Acrescente um quarto usuário via parâmetros e filtre pelo nome usando WHERE name = ?. O que acontece se você passar nil como valor?

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br