← PHP para aplicações reais
03 / 11 · 23 MIN

Dados com parâmetros

Mantém instruções SQL separadas dos valores recebidos.

Separar instruções de dados

Uma consulta preparada permite passar valores como parâmetros em vez de os concatenar na instrução SQL. Isso reduz o risco de a entrada alterar a estrutura da consulta. Os parâmetros representam valores; nomes de tabelas ou colunas dinâmicos precisam de uma lista explícita de opções permitidas.

Transações e propriedade

Usa uma transação quando várias alterações precisam de ser confirmadas em conjunto. Aplica também autorização: uma consulta parametrizada continua a poder devolver o registo de outra pessoa se não limitar o proprietário. Segurança da consulta e autorização resolvem problemas diferentes.

Aplicação guiada no trabalho

Uma consulta de notas privadas precisa de duas decisões: separar valores da estrutura SQL e limitar o recurso ao âmbito autorizado. Usa parâmetros para IDs e texto; o utilizador autenticado tem de vir do contexto validado no servidor, não de um owner_id arbitrário enviado no pedido. Para ordenar por title ou created_at, mapeia a opção recebida para uma das colunas fixas permitidas. Não esperes que ORDER BY :column transforme um parâmetro num identificador. Em IN, uma string com vírgulas também não se transforma numa lista de valores: constrói um placeholder por valor validado e define o comportamento de uma lista vazia. Transações agrupam escritas segundo as garantias do motor, mas não conferem permissões nem eliminam automaticamente a concorrência.

$stmt = $pdo->prepare(
    "SELECT id, title FROM notes WHERE id = :id AND user_id = :user"
);
$stmt->execute(["id" => $noteId, "user" => $currentUserId]);
NA PRÁTICA

Um utilizador altera o identificador de uma nota no URL. A aplicação deve procurar a nota dentro da conta autenticada e recusar o acesso a notas de outras contas.

Armadilhas comuns

Ligar nomes de coluna como valores; concatenar listas recebidas; confiar no owner_id do cliente.

Tópicos relacionados: Segurança na fronteira web · Transações e falhas parciais em PDO

Leva esta ideia contigo

Parametriza valores e verifica o proprietário de cada recurso protegido.

Criar conta

Referência: PHP manual: PDO prepared statements · PHP 8.5 reference; DR PHP 2026.3; new fixtures executed on PHP 8.4.4 / SQLite 3.51.2