PHP ofrece tres APIs diferenctes para conectarse a MySQL. Abajo se muestran las APIs proporcionadas por las extensciones mysql, mysqli, y PDO. Cada trozo de código crea una conexión al servidor de MySQL que se está ejecutando en "ejemplo.com" usando el nombre de usuario "usuario" y la contraseña "contraseña". Y se ejecuta una consulta para saludar al usuario.
Ejemplo #1 Comparación de las tres APIs 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 remendada
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 a partir de PHP 5.5.0 y será eliminada en el futuro. Se proporciona una matriz detallada de comparación de características más abajo. El rendimiento global de las tres extensiones se considera 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í |
Estado de desarrollo | Activo | Activo | Sólo mantenimiento |
Ciclo de vida | Activo | Activo | Obsoleto |
Recomendada para nuevos proyectos | Sí | Sí | No |
Interfaz POO | Sí | Sí | No |
Interfaz procedimental | Sí | No | Sí |
La API soporta el no bloqueo, consultas asíncronas con mysqlnd | Sí | No | No |
Conexiones persistentes | Sí | Sí | Sí |
La API soporta conjunto de caracteres | Sí | Sí | Sí |
La API soporta sentencias preparadas del lado del servidor | Sí | Sí | No |
La API soporta sentencias preparadas del lado del cliente | No | Sí | No |
La API soporta procedimientos almacenados | Sí | Sí | No |
API soporta sentencias múltiples | Sí | La mayoría | No |
La API soporta transacciones | Sí | Sí | No |
Las transacciones se pueden controlar con SQL | Sí | Sí | Sí |
Soporta toda la funcionalidad de MySQL 5.1+ | Sí | La mayoría | No |