Elegir una API

PHP ofrece tres API diferentes para conectarse a MySQL. Abajo se muestran las API proporcionadas por las extensiones mysql, mysqli, y PDO. Cada trozo de código crea una conexión al servidor de MySQL que se está ejecutando en "ejemplo.com" con el nombre de usuario "usuario" y la contraseña "contraseña". También se ejecuta una consulta para saludar al usuario.

Ejemplo #1 Comparación de las tres API de MySQL

<?php
// mysqli
$mysqli = new mysqli("ejemplo.com", "usuario", "contraseña", "basedatos");
$resultado = $mysqli->query("SELECT '¡Hola, querido usuario de MySQL!' AS _message FROM DUAL");
$fila = $resultado->fetch_assoc();
echo 
htmlentities($fila['_message']);

// PDO
$pdo = new PDO('mysql:host=ejemplo.com;dbname=basedatos', 'usuario', 'contraseña');
$sentencia = $pdo->query("SELECT '¡Hola, querido usuario de MySQL!' AS _message FROM DUAL");
$fila = $sentencia->fetch(PDO::FETCH_ASSOC);
echo 
htmlentities($fila['_message']);

// mysql
$c = mysql_connect("ejemplo.com", "usuario", "contraseña");
mysql_select_db("basedatos");
$resultado = mysql_query("SELECT '¡Hola, querido usuario de MySQL!' AS _message FROM DUAL");
$fila = mysql_fetch_assoc($resultado);
echo 
htmlentities($fila['_message']);
?>

API recomendada

Se recomienda usar las extensiones mysqli o PDO_MySQL. No se recomienda usar la extensión mysql antigua para nuevos desarrollos, ya que ha sido declarada obsoleta en PHP 5.5.0 y eliminada en PHP 7. Se proporciona una matriz detallada de comparación de características más abajo. El rendimiento global de las tres extensiones se considera que sea aproximadamente el mismo. Aunque el rendimiento de la extensión aporta solamente una fracción del total del tiempo de ejecución de una consulta web de PHP. A menudo, el impacto es tan bajo como 0.1%.

Comparación de características

  ext/mysqli PDO_MySQL ext/mysql
Versión de PHP donde se introdujo 5.0 5.1 2.0
Incluida con PHP 5.x Sí Sí Sí
Incluida con PHP 7.x Sí Sí No
Estado de desarrollo Activo Activo Mantenimiento solamente en 5.x; eliminada en 7.x
Ciclo de vida Activo Activo Obsoleto en 5.x; eliminado en 7.x
Recomendada para nuevos proyectos Sí Sí No
Interfaz de POO Sí Sí No
Interfaz procedimental Sí No Sí
La API admite la no espera, consultas asíncronas con mysqlnd Sí No No
Conexiones persistentes Sí Sí Sí
La API admite conjunto de caracteres Sí Sí Sí
La API admite sentencias preparadas del lado del servidor Sí Sí No
La API admite sentencias preparadas del lado del cliente No Sí No
La API admite procedimientos almacenados Sí Sí No
API admite sentencias múltiples Sí La mayoría No
La API admite transacciones Sí Sí No
Las transacciones se pueden controlar con SQL Sí Sí Sí
Admite toda la funcionalidad de MySQL 5.1+ Sí La mayoría No