Aprenda a usar consultas preparadas no PHP com MySQL

Veja como usar prepared statements no PHP para realizar consultas seguras e protegidas contra SQL Injection.

Como usar consultas preparadas (prepared statements) no PHP com MySQL?

As consultas preparadas (prepared statements) são um método seguro de executar comandos SQL, impedindo ataques de SQL Injection. Elas garantem que os dados fornecidos pelo usuário sejam tratados como valores e não como comandos SQL maliciosos.

Usando Prepared Statements com MySQLi

Podemos usar MySQLi para criar uma consulta preparada:

<?php
$conexao = new mysqli("localhost", "usuario", "senha", "meu_banco");
if ($conexao->connect_error) {
    die("Erro na conexão: " . $conexao->connect_error);
}

$stmt = $conexao->prepare("SELECT * FROM usuarios WHERE email = ?");
$stmt->bind_param("s", $email);

$email = "usuario@email.com";
$stmt->execute();
$resultado = $stmt->get_result();
while ($linha = $resultado->fetch_assoc()) {
    echo "Nome: " . $linha["nome"] . " - Email: " . $linha["email"] . "<br>";
}
?>

Aqui, bind_param("s", $email) define que o parâmetro será tratado como string (s), protegendo contra injeções SQL.

Usando Prepared Statements com PDO

O PDO permite um uso mais flexível e seguro:

<?php
try {
    $conexao = new PDO("mysql:host=localhost;dbname=meu_banco", "usuario", "senha");
    $conexao->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM usuarios WHERE email = :email";
    $stmt = $conexao->prepare($sql);
    $stmt->bindParam(':email', $email);

    $email = "usuario@email.com";
    $stmt->execute();

    while ($linha = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "Nome: " . $linha["nome"] . " - Email: " . $linha["email"] . "<br>";
    }
} catch (PDOException $e) {
    echo "Erro: " . $e->getMessage();
}
?>

Aqui, usamos bindParam(':email', $email), garantindo que o valor não seja interpretado como parte do SQL.

O uso de prepared statements no PHP é essencial para proteger aplicações contra SQL Injection. Além da segurança, consultas preparadas também melhoram a performance ao reutilizar queries pré-compiladas. Entre MySQLi e PDO, a escolha depende do projeto, mas PDO oferece maior flexibilidade ao permitir o uso de diferentes bancos de dados.

Algumas aplicações:

  • Criação de sistemas seguros contra SQL Injection
  • Autenticação segura de usuários em sistemas web
  • Manipulação eficiente de dados em bancos MySQL
  • Melhoria no desempenho ao executar múltiplas consultas similares

Dicas para quem está começando

  • Sempre utilize prepared statements ao receber dados do usuário.
  • Evite concatenar valores diretamente nas queries SQL.
  • Use PDO se precisar de compatibilidade com outros bancos.
  • Prefira bindParam() para maior controle sobre os parâmetros.
  • Ative PDO::ERRMODE_EXCEPTION para capturar erros e evitar falhas silenciosas.

Contribuições de Rafael Nogueira

Compartilhe este tutorial: Como usar consultas preparadas (prepared statements) no PHP com MySQL?

Compartilhe este tutorial

Continue aprendendo:

Como lidar com erros de conexão ao MySQL no PHP?

Veja como capturar e tratar erros de conexão ao MySQL no PHP com MySQLi e PDO, garantindo uma melhor experiência para o usuário.

Tutorial anterior

Como fazer login e autenticação de usuário usando PHP e MySQL?

Veja como implementar um sistema de login com PHP e MySQL utilizando sessões e senhas criptografadas para maior segurança.

Próximo tutorial