Função db_query_param
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áusulasIN
.
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 pode ser 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; // inteiro
$nome = "Maria Eduarda"; // string
$cadastro = '2025-07-22'; // data
$trabalha = true; // boolean
$renda = 4560.75; // float
$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