Skip to main content

Função db_query_param

Translator

 

Translator




Translator




Função db_query_params($sql, $params = [], $conn = null)

Descrição

Executa uma query SQL utilizando parâmetros para evitar SQL Injection, garantindo que os valores sejam tratados de forma segura pelo banco de dados.

Suporta:

  • Sequencial (posicional) — placeholders $1, $2, ... com valores em array na ordem da query.

  • Associativo (nomeado) — placeholders :id, :nome, ... com valores em array associativo.

  • WHERE IN com array — expansão automática de valores para listas em cláusulas IN.


Recebe:

  • $sql: string da query com placeholders.

  • $params: array com os valores dos placeholders.

  • $conn: conexão com o banco (opcional).

Exemplos de Uso — Vários Tipos de Parâmetros

1. String

$nome = "Fulano da Silva";
$sql = "SELECT * FROM db_usuarios WHERE nome = $1";
$rs = db_query_params($sql, [$nome]);
//OR
$nome = "Fulano da Silva";
$sql = "SELECT * FROM db_usuarios WHERE nome = :nome";
$rs = db_query_params($sql, ['nome' => $nome]);

2. Inteiro

$z01_numcgm = 42;
$sql = "SELECT * FROM cgm WHERE z01_numcgm = $1";
$rs = db_query_params($sql, [$z01_numcgm]);
//OR
$z01_numcgm = 42;
$sql = "SELECT * FROM cgm WHERE z01_numcgm = :numcgm";
$rs = db_query_params($sql, ['numcgm' => $z01_numcgm]);

3. Float

$k00_valor = 100.50;
$sql = "SELECT * FROM arrecad WHERE k00_valor >= $1";
$rs = db_query_params($sql, [$k00_valor]);
//OR
$k00_valor = 100.50;
$sql = "SELECT * FROM arrecad WHERE k00_valor >= :valor";
$rs = db_query_params($sql, ['valor' => $k00_valor]);

4. Boolean

$ativo = true; // ou 1 (verdadeiro) e 0 (falso)
$sql = "SELECT * FROM db_itensmenu WHERE libcliente = $1";
$rs = db_query_params($sql, [$ativo]);
//OR
$ativo = true; // ou 1 (verdadeiro) / 0 (falso)
$sql = "SELECT * FROM db_itensmenu WHERE libcliente = :ativo";
$rs = db_query_params($sql, ['ativo' => $ativo]);

5. Data

$data_inicio = '2025-07-01';
$data_fim = '2025-07-31';
$sql = "SELECT * FROM eventos WHERE data_evento BETWEEN $1 AND $2";
$rs = db_query_params($sql, [$data_inicio, $data_fim]);
//OR
$data_inicio = '2025-07-01';
$data_fim    = '2025-07-31';
$sql = "SELECT * FROM eventos WHERE data_evento BETWEEN :inicio AND :fim";
$rs = db_query_params($sql, ['inicio' => $data_inicio, 'fim' => $data_fim]);

6. WHERE IN


$ids = [1, 2, 3];
$sql = "SELECT * FROM pedidos WHERE id IN (:ids)";
$rs = db_query_params($sql, ['ids' => $ids]);

$nomes = ['João', 'Maria', 'Ana'];
$sql = "SELECT * FROM clientes WHERE nome IN (:nomes)";
$rs = db_query_params($sql, ['nomes' => $nomes]);

Exemplo de consulta com parâmetros fixos

$numcgm      = 1001;
$nome        = "Maria Eduarda";
$cadastro    = '2025-07-22';
$trabalha    = true;
$renda       = 4560.75;

$sql = "SELECT * 
        FROM cgm 
        WHERE z01_numcgm   = $1 
          AND z01_nome     = $2 
          AND z01_cadast   = $3 
          AND z01_trabalha = $4 
          AND z01_renda   >= $5 ";
$params = [$numcgm, $nome, $cadastro, $trabalha, $renda];
$rs = db_query_params($sql, $params);
//OR
$sql = "
    SELECT *
    FROM   cgm
    WHERE  z01_numcgm    = :numcgm
      AND  z01_nome      = :nome
      AND  z01_cadast    = :cadastro
      AND  z01_trabalha  = :trabalha
      AND  z01_renda    >= :renda";

$params = [
    'numcgm'   => $numcgm,
    'nome'     => $nome,
    'cadastro' => $cadastro,
    'trabalha' => $trabalha,
    'renda'    => $renda
];
$rs = db_query_params($sql, $params);

Exemplo Dinâmico

// Parâmetros Sequenciais

$numcgm   = null;
$nome     = "Carlos%";
$cadastro = null;
$trabalha = true;
$renda    = 1000.00;

$where = [];
$params = [];

if (isset($numcgm) && $numcgm !== '' && $numcgm !== null) {
    $where[] = "z01_numcgm = $".(count($params)+1);
    $params[] = $numcgm;
}

if (isset($nome) && $nome !== '' && $nome !== null) {
    $where[] = "z01_nome ILIKE $".(count($params)+1);
    $params[] = $nome;
}

if (isset($cadastro) && $cadastro !== '' && $cadastro !== null) {
    $where[] = "z01_cadast = $".(count($params)+1);
    $params[] = $cadastro;
}

if (isset($trabalha)) {
    $where[] = "z01_trabalha = $".(count($params)+1);
    $params[] = $trabalha;
}

if (isset($renda) && $renda !== '' && $renda !== null) {
    $where[] = "z01_renda >= $".(count($params)+1);
    $params[] = $renda;
}

$sql = "SELECT * FROM cgm";
if (count($where) > 0) {
    $sql .= " WHERE " . implode(" AND ", $where);
}

$rs = db_query_params($sql, $params);

Os valores do array $params só serão aplicados se a respectiva chave for mencionada na string SQL gerada. No exemplo, $numcgm e $cadastro estão nulos, então as condições correspondentes nem chegam a entrar no WHERE; consequentemente os parâmetros :cgm e :cadastro não são utilizados na execução da query, mesmo estando presentes em $params.

// Parâmetros Associativos
$numcgm   = null;
$nome     = "%Carlos%";
$cadastro = null;
$trabalha = true;
$renda    = 1000.00;

$where = [];
$params = ['cgm' => $z01_numcgm, 'nome' => $nome, 'cadastro' => $cadastro, 'trabalha' => $trabalha, 'renda' => $renda];

if (isset($numcgm) && $numcgm !== '' && $numcgm !== null) {
    $where[] = "z01_numcgm = :cgm";
}

if (isset($nome) && $nome !== '' && $nome !== null) {
    $where[] = "z01_nome ILIKE :nome";
}

if (isset($cadastro) && $cadastro !== '' && $cadastro !== null) {
    $where[] = "z01_cadast = :cadastro";
}

if (isset($trabalha)) {
    $where[] = "z01_trabalha = :trabalha";
}

if (isset($renda) && $renda !== '' && $renda !== null) {
    $where[] = "z01_renda >= :renda";
}

$sql = "SELECT * FROM cgm";
if (count($where) > 0) {
    $sql .= " WHERE " . implode(" AND ", $where);
}

$rs = db_query_params($sql, $params);

Saída do exemplo dinâmico :  SELECT * FROM cgm WHERE z01_nome ILIKE 'Carlos%' AND z01_trabalha = true AND z01_renda >= 1000.00