Escolhendo uma API

O PHP oferece diferentes APIs para conexão ao MySQL. Pode-se ver abaixo as APIs fornecidas pelas extensões mysqli e PDO. Cada porção de código cria uma conexão a um servidor MySQL sendo executado em "example.com" usando o usuário "user" e a senha "password". E uma consulta é executada para cumprimentar o usuário.

Exemplo #1 Comparando as APIs do MySQL

<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$result = $mysqli->query("SELECT 'Olá, prezado usuário MySQL!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo
htmlentities($row['_message']);

// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->query("SELECT 'Olá, prezado usuário MySQL!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo
htmlentities($row['_message']);

Exemplo #2 Comparando instruções preparadas

<?php
// mysqli
$mysqli = new mysqli("example.com", "user", "password", "database");
$statement = $mysqli->prepare("SELECT District FROM City WHERE Name=?");
$statement->execute(["Amersfoort"]);
$result = $statement->get_result();
$row = $result->fetch_assoc();
echo
htmlentities($row['District']);

// PDO
$pdo = new PDO('mysql:host=example.com;dbname=database', 'user', 'password');
$statement = $pdo->prepare("SELECT District FROM City WHERE Name=?");
$statement->execute(["Amersfoort"]);
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo
htmlentities($row['District']);

Comparação de características

O desempenho geral de ambas as extensões é considerada aproximadamente a mesma, embora o desempenho da extensão contribui somente para uma fração do tempo total de uma requisição web do PHP. Frequentemente, o impacto é tão baixo quanto 0,1%.

 ext/mysqliPDO_MySQL
Versão em que foi introduzida no PHP5.05.1
Incluída no PHP 7.x e 8.xSimSim
Estado do desenvolvimentoAtivoAtivo
Ciclo de vidaAtivoAtivo
Recomendado para novos projetosSimSim
Interface POOSimSim
Interface ProceduralSimNão
API suporta consultas sem bloqueio assíncronas com mysqlndSimNão
Conexões persistentesSimSim
API suporta conjuntos de caracteresSimSim
API suporta Instruções Preparadas no lado do servidorSimSim
API suporta Instruções Preparadas no lado do clienteNãoSim
API suporta Procedimentos ArmazenadosSimSim
API suporta Múltiplas InstruçõesSimA maioria
API suporta TransaçõesSimSim
Transações podem ser controladas com SQLSimSim
Supporta toda a funcionalidade do MySQL 5.1+SimA maioria
To Top