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 |