Instruções preparadas e vinculação
Use prepare, bindParam e execute para evitar injeção de SQL.
Instruções preparadas e vinculação é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.
Por que usar instruções preparadas?
As instruções preparadas separam a estrutura SQL dos dados. A entrada do usuário é sempre tratada como um valor — nunca como código SQL — tornando a injeção de SQL impossível.
prepare() + execute()
Fluxo básico: prepare com marcadores de posição e depois execute com valores.
<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$_POST["email"]]);
$user = $stmt->fetch();Marcadores nomeados
Use marcadores nomeados (:name) para obter clareza, especialmente quando o mesmo valor aparece várias vezes.
<?php
$stmt = $pdo->prepare(
"INSERT INTO users (name, email) VALUES (:name, :email)"
);
$stmt->execute([':name' => "Alice", ':email' => "alice@example.com"]);bindParam vs bindValue
bindParam associa uma variável por referência — o valor é lido no momento da execução. bindValue associa um valor imediatamente.
<?php
$name = "Bob";
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)");
$stmt->bindParam(":name", $name);
$name = "Carol";
$stmt->execute(); // inserts "Carol"Exemplo de bindValue
Use bindValue quando quiser fixar o valor no momento da associação.
<?php
$stmt = $pdo->prepare("SELECT * FROM products WHERE price < :max");
$stmt->bindValue(":max", 50.00, PDO::PARAM_INT);
$stmt->execute();Constantes de tipo
O terceiro parâmetro, opcional, especifica o tipo de dado: PDO::PARAM_INT, PDO::PARAM_STR, PDO::PARAM_BOOL, PDO::PARAM_NULL.
Executando instruções novamente
Uma instrução preparada pode ser executada várias vezes — a consulta é compilada uma única vez no servidor.
<?php
$stmt = $pdo->prepare("INSERT INTO logs (msg) VALUES (:msg)");
foreach ($messages as $msg) {
$stmt->execute([':msg' => $msg]);
}rowCount()
Depois de INSERT, UPDATE ou DELETE, rowCount() retorna quantas linhas foram afetadas.
<?php
$stmt = $pdo->prepare("DELETE FROM users WHERE active = 0");
$stmt->execute();
echo $stmt->rowCount()." users deleted";lastInsertId()
Depois de um INSERT, obtenha a chave primária de incremento automático com $pdo->lastInsertId().
<?php
$stmt = $pdo->prepare("INSERT INTO articles (title) VALUES (:t)");
$stmt->execute([':t' => "My Post"]);
$newId = $pdo->lastInsertId();Nunca concatene a entrada do usuário
Nunca faça isto: "SELECT * FROM users WHERE name = '".$name."'". Use sempre marcadores de posição — mesmo que tenha "sanitizado" a entrada.
Objeto PDOStatement
prepare() retorna um PDOStatement com: execute(), fetch(), fetchAll(), bindParam(), bindValue(), rowCount().
Resumo
Use sempre instruções preparadas para consultas com dados externos. Prefira marcadores nomeados. Use bindValue para valores imediatos e bindParam para associações em laços.
Verificação rápida
Quando bindParam lê o valor?
Perguntas Frequentes
A aula “Instruções preparadas e vinculação” é grátis?
Sim — o texto completo de “Instruções preparadas e vinculação” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.
O que vou aprender em “Instruções preparadas e vinculação”?
Use prepare, bindParam e execute para evitar injeção de SQL. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar PHP Academy?
Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Instruções preparadas e vinculação”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de PHP Academy?
Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Conexão com MySQL usando PDO
- Instruções preparadas e vinculação
- Obtenção de resultados com PDO
- Transações com PDO