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
Incluida con PHP 7.x 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 No
Interfaz de POO No
Interfaz procedimental No
La API admite la no espera, consultas asíncronas con mysqlnd No No
Conexiones persistentes
La API admite conjunto de caracteres
La API admite sentencias preparadas del lado del servidor No
La API admite sentencias preparadas del lado del cliente No No
La API admite procedimientos almacenados No
API admite sentencias múltiples La mayoría No
La API admite transacciones No
Las transacciones se pueden controlar con SQL
Admite toda la funcionalidad de MySQL 5.1+ La mayoría No