Uso de las extensiones PHP MySQL (mysqlnd, mysqli, PDO) en ServBay
ServBay es un potente entorno local de desarrollo web integrado que simplifica enormemente la interacción entre aplicaciones PHP y bases de datos. Para todas las versiones de PHP soportadas, ServBay viene con las extensiones clave de MySQL —mysqlnd
, mysqli
y PDO_MySQL
— preinstaladas y activadas por defecto. Esto significa que puedes empezar a usar bases de datos MySQL o MariaDB en tus proyectos PHP sin necesidad de configuraciones manuales adicionales.
Extensiones PHP MySQL disponibles en ServBay
ServBay integra en sus entornos PHP las tres principales extensiones de MySQL para asegurar máxima compatibilidad y rendimiento:
MySQL Native Driver (
mysqlnd
): El driver nativo de PHP para MySQL, que sirve como biblioteca base paramysqli
yPDO_MySQL
. Ofrece una comunicación eficiente entre PHP y servidores MySQL/MariaDB, y suele proporcionar mejores prestaciones y gestión de memoria.MySQLi (
mysqli
): Extensión mejorada de MySQL que ofrece interfaces orientadas a objetos y procedimentales para conectar con MySQL y MariaDB. Soporta sentencias preparadas, control de transacciones, procedimientos almacenados y consultas múltiples avanzadas.PDO MySQL (
PDO_MySQL
): Driver de MySQL exclusivo para PDO (PHP Data Objects), que proporciona una capa de abstracción uniforme para acceso a distintas bases de datos (incluyendo MySQL, MariaDB, PostgreSQL, SQLite, entre otras), aumentando la portabilidad del código.
Estado de activación
En ServBay, las extensiones mysqlnd
, mysqli
y PDO_MySQL
están activadas por defecto en todas las versiones de PHP. No necesitas realizar ninguna acción adicional para habilitarlas. ServBay ya configura automáticamente el archivo php.ini
, permitiéndote usar estas extensiones directamente en tu código para conectar con la base de datos.
Detalles de cada extensión PHP MySQL
Conocer las diferencias entre estas tres extensiones te ayudará a elegir la más adecuada según las necesidades de tu proyecto:
MySQL Native Driver (
mysqlnd
)- Propósito principal:
mysqlnd
es un driver nativo de PHP escrito en C, que actúa como capa base de comunicación entre PHP y servidores MySQL/MariaDB. - Características clave: Desde PHP 5.3,
mysqlnd
es la biblioteca por defecto para las extensionesmysqli
yPDO_MySQL
, integrada directamente en PHP y sin necesidad de vincular bibliotecas externas comolibmysqlclient
. - Ventajas principales: Ofrece mejor rendimiento y gestión de memoria frente a la antigua
libmysqlclient
, y soporta características avanzadas como consultas asíncronas, mejoras en conexiones persistentes y una API de plugins enriquecida. Lo habitual es aprovecharmysqlnd
indirectamente mediantemysqli
oPDO
, sin interactuar directamente con su API.
- Propósito principal:
MySQLi (
mysqli
)- Propósito principal: "MySQL Improved Extension" es una extensión PHP diseñada específicamente para MySQL (versión 4.1.3 en adelante) y MariaDB.
- Características clave: Ofrece interfaces de programación orientadas a objetos y procedimentales. Soporta sentencias preparadas (previniendo inyecciones SQL), control transaccional, llamadas a procedimientos almacenados y ejecución de múltiples sentencias, entre otras funciones avanzadas.
- Ventajas principales: Es muy completa y optimizada para MySQL/MariaDB, con gran rendimiento. Si tu proyecto solo usará MySQL o MariaDB y requiere exprimir características avanzadas de esos sistemas,
mysqli
es una opción fiable.
PDO MySQL (
PDO_MySQL
)- Propósito principal: PHP Data Objects (PDO) provee una interfaz ligera y consistente para acceder a diferentes bases de datos.
PDO_MySQL
es su driver específico para MySQL/MariaDB. - Características clave: Permite operar bases de datos mediante una API uniforme (
PDO
yPDOStatement
). Fuerza el uso de sentencias preparadas (prepare()
yexecute()
), lo que facilita la protección contra inyecciones SQL, y soporta transacciones. - Ventajas principales: Portabilidad es el mayor atractivo de PDO: si tu aplicación podría necesitar en el futuro cambiar a PostgreSQL, SQLite u otro SGBD soportado, el uso de PDO minimiza el refactorizado. Su interfaz limpia, orientada a objetos, genera código más claro y seguro. Para proyectos nuevos, se suele recomendar PDO.
- Propósito principal: PHP Data Objects (PDO) provee una interfaz ligera y consistente para acceder a diferentes bases de datos.
Ejemplo de código PHP: conectar y operar con la base de datos
Los siguientes ejemplos muestran cómo utilizar mysqli
y PDO
en PHP para conectar con una base de datos gestionada por ServBay (ya sea MariaDB o MySQL) y ejecutar operaciones básicas.
Requisitos previos:
- El servicio de MySQL o MariaDB debe estar en funcionamiento en ServBay.
- Se supone que ya existe una base de datos llamada
servbay_db
. - Debes tener un usuario creado llamado
servbay_user
, con contraseñayour_password
, que disponga de los permisos adecuados sobreservbay_db
. - Existe una tabla
users
en la base de datosservbay_db
con las columnas:id
(INT, PK, AI),name
(VARCHAR),email
(VARCHAR) yage
(INT).
Puedes utilizar phpMyAdmin integrado en ServBay, u otra herramienta de gestión de bases de datos, para preparar este entorno.
Ejemplo de código (método mysqli
)
<?php
// --- Ejemplo mysqli ---
// Parámetros de conexión a la base de datos
$servername = "127.0.0.1"; // o 'localhost'
$port = 3306; // Puerto por defecto de MySQL/MariaDB en ServBay
$username = "servbay_user";
$password = "your_password"; // Sustituir por la contraseña real
$dbname = "servbay_db";
// Crear conexión mysqli (estilo orientado a objetos)
$conn = new mysqli($servername, $username, $password, $dbname, $port);
// Comprobar si la conexión fue exitosa
if ($conn->connect_error) {
die("mysqli Connection failed: " . $conn->connect_error);
}
echo "mysqli Connected successfully<br>";
// Insertar datos (usando sentencia preparada para evitar inyección SQL)
$stmt = $conn->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$name = "ServBay Demo";
$email = "[email protected]";
$age = 5;
// "ssi" indica tipos string, string, int
$stmt->bind_param("ssi", $name, $email, $age);
if ($stmt->execute()) {
echo "mysqli: New record created successfully<br>";
} else {
echo "mysqli Error: " . $stmt->error . "<br>";
}
$stmt->close();
// Consultar datos
$sql = "SELECT id, name, email, age FROM users WHERE name = 'ServBay Demo'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "mysqli Queried data:<br>";
// Mostrar datos
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. " - Age: " . $row["age"]. "<br>";
}
} else {
echo "mysqli: 0 results found<br>";
}
// Cerrar conexión
$conn->close();
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Ejemplo de código (método PDO
)
<?php
// --- Ejemplo PDO ---
// Parámetros de conexión a la base de datos
$host = '127.0.0.1'; // o 'localhost'
$port = 3306; // Puerto por defecto de MySQL/MariaDB en ServBay
$dbname = 'servbay_db';
$username = 'servbay_user';
$password = 'your_password'; // Sustituir por la contraseña real
$charset = 'utf8mb4';
// Nombre de fuente de datos (DSN)
$dsn = "mysql:host=$host;port=$port;dbname=$dbname;charset=$charset";
// Opciones de conexión PDO
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // Lanzar excepciones en vez de advertencias
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // Obtener resultados como arrays asociativos por defecto
PDO::ATTR_EMULATE_PREPARES => false, // Usar sentencias preparadas nativas
];
try {
// Crear instancia de conexión PDO
$pdo = new PDO($dsn, $username, $password, $options);
echo "PDO Connected successfully<br>";
// Insertar datos (usando sentencia preparada)
$sql = "INSERT INTO users (name, email, age) VALUES (:name, :email, :age)";
$stmt = $pdo->prepare($sql);
$name = 'ServBay PDO Demo';
$email = '[email protected]';
$age = 10;
// Vincular parámetros y ejecutar
$stmt->execute([
':name' => $name,
':email' => $email,
':age' => $age
]);
echo "PDO: New record created successfully<br>";
// Consultar datos
$stmt = $pdo->prepare("SELECT id, name, email, age FROM users WHERE name = :name");
$stmt->execute([':name' => 'ServBay PDO Demo']);
// Obtener todos los resultados
$users = $stmt->fetchAll(); // Por defecto FETCH_ASSOC
if ($users) {
echo "PDO Queried data:<br>";
foreach ($users as $row) {
echo "id: " . $row['id'] . " - Name: " . $row['name'] . " - Email: " . $row['email'] . " - Age: " . $row['age'] . "<br>";
}
} else {
echo "PDO: 0 results found<br>";
}
} catch (\PDOException $e) {
// Capturar y mostrar errores de conexión o consulta
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
// La conexión PDO suele cerrarse automáticamente al finalizar el script
// $pdo = null; // Cierre explícito opcional
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
Cómo colocar el código: Guarda cualquiera de los ejemplos como un archivo .php
(por ejemplo, db_test_mysqli.php
o db_test_pdo.php
) dentro del directorio raíz de tu sitio en ServBay (por ejemplo, /Applications/ServBay/www/myproject/
), y accede a la URL correspondiente desde el navegador (por ejemplo, http://myproject.servbay.demo/db_test_mysqli.php
). Asegúrate de que tu sitio esté correctamente configurado y ejecutándose en ServBay.
Preguntas Frecuentes (FAQ)
P: ¿Debo instalar manualmente las extensiones MySQL de PHP en ServBay?
R: No es necesario. ServBay ya incluye y activa por defecto para todas las versiones de PHP que gestiona las extensiones clave mysqlnd
, mysqli
y PDO_MySQL
. Puedes usarlas directamente en tu código PHP sin ningún paso de instalación o configuración extra.
P: ¿Debo elegir mysqli
o PDO
?
R:
- Se recomienda
PDO
: Si tu aplicación puede necesitar soporte para distintos sistemas de bases de datos (no solo MySQL/MariaDB), o buscas un enfoque más moderno, orientado a objetos y con mejor portabilidad, la mejor opción es PDO. Además, obliga a usar sentencias preparadas, incrementando la seguridad. - Considera
mysqli
: Si tu proyecto solo necesita trabajar con MySQL o MariaDB y aprovechar funciones avanzadas propias de estos motores, entoncesmysqli
es una alternativa potente y eficiente. Proporciona interfaces orientadas a objetos y procedimentales.
Para proyectos nuevos, generalmente se aconseja escoger PDO.
P: ¿Cómo identifico los parámetros de conexión para los servicios MySQL/MariaDB en ServBay?
R:
- Host (Hostname): Normalmente
127.0.0.1
olocalhost
. - Puerto (Port): El puerto por defecto de dichos servicios suele ser
3306
. Puedes consultarlo en la interfaz de gestión de paquetes de ServBay. - Usuario/Contraseña (Username/Password): Usa las credenciales del usuario creado en MySQL/MariaDB. Para primeras pruebas, puedes crear un usuario nuevo o recurrir temporalmente al usuario root (no recomendado para producción). phpMyAdmin de ServBay permite gestionar usuarios y permisos fácilmente.
- Nombre de la base de datos (Database Name): Indica el nombre del esquema al que deseas conectar.
P: Tengo un proyecto antiguo que usa funciones mysql_*
(ya obsoletas). ¿ServBay las soporta?
R: Sí, para facilitar el mantenimiento y migración de aplicaciones antiguas, ServBay ha incluido soporte para las antiguas funciones mysql_*
(por ejemplo, mysql_connect
) en el entorno de PHP 5.6. Estas funciones fueron declaradas obsoletas en PHP 5.5 y eliminadas completamente en PHP 7.0. Gracias a PHP 5.6 en ServBay, puedes ejecutar código legado sin buscar versiones aún más antiguas de PHP.
No obstante, es altamente recomendable:
- Usar estas funciones únicamente para compatibilidad temporal o mantenimiento de proyectos antiguos.
- Para proyectos nuevos o si vas a refactorizar código, migra preferentemente a
mysqli
oPDO
por motivo de seguridad y acceso a funcionalidades modernas. Lasmysql_*
presentan riesgos (como mayor exposición a inyecciones SQL) y carecen de soporte avanzado.
Conclusión
ServBay simplifica considerablemente el flujo de trabajo con bases de datos para desarrolladores PHP gracias a que preinstala y activa por defecto las extensiones clave mysqlnd
, mysqli
y PDO_MySQL
en todas sus versiones de PHP, y ofrece compatibilidad con funciones anticuadas mysql_*
en PHP 5.6. No tienes que preocuparte por procesos de instalación o configuración complejos: puedes elegir la extensión que mejor se ajuste a tu proyecto (se recomienda PDO o mysqli) y empezar a conectar y operar con bases de datos MySQL o MariaDB gestionadas en tu entorno local ServBay.
Esta facilidad “listo para usar” te permite enfocar tus esfuerzos en el desarrollo lógico de tus aplicaciones, aprovechando la estabilidad y eficiencia del entorno local que ServBay proporciona para el desarrollo, prueba y mantenimiento rápido de tus servicios web.