PHP – PDO vs MySQLi

Por
3 min. de leitura

Saudações, futuro(a) aprovado(a)! Professor Gunter Amorim aqui.

Neste artigo, vamos explorar duas ferramentas essenciais para interação com bancos de dados no PHP: PDO (PHP Data Objects) e MySQLi (MySQL Improved). Ambas as extensões têm suas particularidades e benefícios, mas como escolher entre elas? Vamos descobrir juntos!

O que é PDO?

PDO (PHP Data Objects) é uma extensão genérica que fornece uma interface consistente para trabalhar com diferentes bancos de dados em PHP. Com o PDO, você pode conectar-se a mais de 12 tipos de bancos de dados, como MySQL, PostgreSQL, SQLite, Oracle, entre outros. Essa flexibilidade é ideal para aplicações que precisam de portabilidade entre diferentes plataformas de banco de dados.

Principais Características do PDO:

  • Suporte a vários bancos de dados.
  • Prepared statements (declarações preparadas) que aumentam a segurança contra ataques de SQL Injection.
  • Interface uniforme, o que significa que o código é facilmente adaptável para outro banco de dados.

Exemplo de Conexão com PDO:

try {
    $pdo = new PDO('mysql:host=localhost;dbname=exemplo', 'usuario', 'senha');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Conexão bem-sucedida!";
} catch (PDOException $e) {
    echo "Erro: " . $e->getMessage();
}

O que é MySQLi?

MySQLi (“MySQL Improved”) é uma extensão específica para interagir com o banco de dados MySQL. Essa extensão melhora o desempenho e oferece suporte a recursos mais avançados introduzidos nas versões mais recentes do MySQL, como transações e stored procedures.

Principais Características do MySQLi:

  • Suporte exclusivo ao MySQL.
  • Prepared statements para prevenção de SQL Injection.
  • Suporte a orientação a objetos e funções procedurais.
  • Melhor desempenho em aplicações focadas no MySQL.

Exemplo de Conexão com MySQLi:

$mysqli = new mysqli("localhost", "usuario", "senha", "exemplo");

if ($mysqli->connect_error) {
    die("Erro de conexão: " . $mysqli->connect_error);
}

echo "Conexão bem-sucedida!";

Comparativo: PDO vs MySQLi

CaracterísticaPDOMySQLi
CompatibilidadeMúltiplos bancos de dadosApenas MySQL
Orientação a ObjetosTotalmente orientado a objetosObjetos e Procedural
Segurança (SQL Injection)Suporte a prepared statementsSuporte a prepared statements
Facilidade de PortabilidadeAltaBaixa
PerformanceSimilar (para MySQL)Otimizada para MySQL
Suporte a Recursos EspecíficosMenor foco em MySQLSuporte exclusivo ao MySQL

Quando Usar Cada Um?

Escolha PDO se:

  • Você planeja ou tem a possibilidade de mudar o banco de dados no futuro.
  • Deseja um código mais genérico e flexível para diferentes plataformas.
  • Precisa trabalhar com diversos bancos de dados na mesma aplicação.

Escolha MySQLi se:

  • Sua aplicação utiliza exclusivamente MySQL.
  • Você busca o máximo de desempenho e quer aproveitar recursos específicos do MySQL.
  • Prefere a opção de usar estilo procedural ou orientado a objetos.

E como fica nas questões de concurso, Gunter? Bora ver!

1. (IV-UFG/ANALISTA/TJ-AC/2024)

Ao utilizar o PHP Data Objects (PDO) para interação com um banco de dados MySQL, qual prática é recomendada para prevenir SQL Injection?

  1. Utilização de prepared statements com placeholders para parâmetros. 
  2. Uso de variáveis globais PHP dentro de consultas SQL.
  3. Concatenação direta de variáveis na string de consulta SQL.
  4. Execução direta de consultas SQL recebidas através de entradas do usuário.

COMENTÁRIO

A alternativa correta é a letra A. A utilização de prepared statements com placeholders para parâmetros é a prática recomendada para prevenir SQL Injection. Essa abordagem garante que os valores fornecidos pelo usuário sejam tratados como dados e não como comandos SQL. Isso ocorre porque o PDO utiliza a separação entre a consulta e os valores, prevenindo a execução de comandos maliciosos injetados nas entradas do usuário. É uma solução eficiente e amplamente utilizada para aumentar a segurança de aplicações que interagem com bancos de dados.

2. (PR4 (UFRJ)/ANALISTA/UFRJ/2014)

Para acessar dados em um banco de dados MySQL, devemos abrir uma conexão com o servidor MySQL. Em PHP 5.5, isso pode ser feito com a função:

  1. mysql_connection ()
  2. dbconnect ()
  3. mysqli_connect ()
  4. db.connect ()
  5. mysqli_dbconnect()

COMENTÁRIO

A alternativa correta é a letra C. A função mysqli_connect() é usada para estabelecer uma conexão com um banco de dados MySQL no PHP. Introduzida como parte da extensão MySQLi, ela substitui a função obsoleta mysql_connect() a partir do PHP 5.5, oferecendo suporte a recursos mais modernos, como prepared statements e conexões seguras. Essa função aceita parâmetros como host, nome de usuário, senha e nome do banco de dados para configurar a conexão com o servidor MySQL.

3. (INSTITUTO VERBENA/ANALISTA/TC AC/2024)

Ao utilizar o PHP Data Objects (PDO) para interação com um banco de dados MySQL, qual prática é recomendada para prevenir SQL Injection?

  1. Utilização de prepared statements com placeholders para parâmetros.
  2. Uso de variáveis globais PHP dentro de consultas SQL.
  3. Concatenação direta de variáveis na string de consulta SQL.
  4. Execução direta de consultas SQL recebidas através de entradas do usuário.

COMENTÁRIO

A alternativa correta é a letra A. A utilização de prepared statements com placeholders para parâmetros é a prática mais recomendada para prevenir SQL Injection ao usar PHP Data Objects (PDO). Prepared statements permitem separar a lógica SQL dos dados fornecidos pelo usuário, garantindo que esses dados sejam tratados como valores e não como comandos SQL. Essa abordagem elimina a possibilidade de injeção de comandos maliciosos na consulta, fortalecendo a segurança da aplicação.

Conclusão

Tanto PDO quanto MySQLi oferecem recursos modernos e seguros para trabalhar com bancos de dados em PHP. Sua escolha deve ser baseada nas necessidades específicas do projeto, como portabilidade, desempenho e preferências pessoais. O importante é garantir que o código seja seguro, organizado e fácil de manter. Agora que você conhece as diferenças entre PDO e MySQLi, pode escolher a melhor ferramenta para sua próxima aplicação. Sucesso no código!

Abraços e até a próxima jornada!


Quer ficar por dentro dos concursos públicos abertos e previstos pelo Brasil? Clique nos links abaixo:

CONCURSOS 2025

CONCURSOS ABERTOS

QUESTÕES DE CONCURSOS

Receba gratuitamente no seu celular as principais notícias do mundo dos concursos. Clique no link abaixo e inscreva-se:

WHATSAPP

TELEGRAM

Por
3 min. de leitura