Crear una base de datos MySQL con PHP
Aprende a crear una base de datos MySQL con PHP usando MySQLi: conectar al servidor, ejecutar CREATE DATABASE y crear tablas paso a paso.
Una base de datos es el contenedor con nombre que almacena tus tablas, y cada tabla guarda los datos de tu aplicación en filas y columnas. Antes de poder almacenar usuarios, pedidos o publicaciones de blog, ese contenedor debe existir en el servidor MySQL. Este capítulo recorre la secuencia completa en PHP: conectarse al servidor, ejecutar una instrucción CREATE DATABASE y luego agregar una tabla dentro de ella.
Ya deberías tener PHP y un servidor MySQL (o MariaDB) instalados y en ejecución. Si el paso de conexión falla, consulta PHP Connect to MySQL y PHP MySQLi para obtener detalles de configuración.
Dos formas de comunicarse con MySQL
PHP incluye dos extensiones modernas para MySQL: MySQLi y PDO. Ambas son seguras y están soportadas; este capítulo usa MySQLi porque es específica de MySQL y resulta sencilla de leer, pero el mismo SQL CREATE DATABASE funciona también con PDO. Usa PDO cuando puedas cambiar de motor de base de datos en el futuro, y prefiere las instrucciones preparadas siempre que la entrada del usuario toque una consulta.
Las antiguas funciones mysql_* fueron eliminadas en PHP 7 — no las uses.
Paso 1 — Conectarse al servidor MySQL
Para crear una base de datos te conectas al servidor, no a una base de datos específica (todavía no existe). Pasas el host, el nombre de usuario y la contraseña, pero no el nombre de la base de datos:
<?php
$servername = "localhost";
$username = "root";
$password = "";
// Create connection (no database name — we're about to create one)
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>new mysqli(...) devuelve un objeto de conexión. Si algo sale mal, $conn->connect_error contiene el mensaje y die() detiene el script con él. El nombre de usuario y la contraseña anteriores son marcadores de posición — reemplázalos con tus propias credenciales.
Los tres pasos siguientes se muestran como fragmentos separados para mayor claridad. En un proyecto real, mantendrías el código de conexión en un archivo y lo incluirías con require o include.
Paso 2 — Crear la base de datos
Con una conexión al servidor abierta, ejecuta una instrucción CREATE DATABASE mediante $conn->query(). Para una instrucción que no devuelve filas (como CREATE, INSERT o UPDATE), query() devuelve TRUE en caso de éxito y FALSE en caso de error:
<?php
// SQL to create a database named myDB
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === TRUE) {
echo "Database created successfully";
} else {
echo "Error creating database: " . $conn->error;
}
$conn->close();
?>Consejo: usa CREATE DATABASE IF NOT EXISTS myDB para evitar un error si la base de datos ya existe — muy útil en scripts de configuración que pueden ejecutarse más de una vez.
Paso 3 — Crear una tabla dentro de la base de datos
Una base de datos por sí sola está vacía. Los datos viven en tablas, que defines con CREATE TABLE — un nombre de tabla seguido de sus columnas y sus tipos de datos. Esta vez te conectas con el nombre de la base de datos (el cuarto argumento) para que la nueva tabla quede en el lugar correcto:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// Connect, this time selecting the myDB database
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL to create a table
$sql = "CREATE TABLE MyGuests (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
if ($conn->query($sql) === TRUE) {
echo "Table MyGuests created successfully";
} else {
echo "Error creating table: " . $conn->error;
}
$conn->close();
?>Lo que significan las definiciones de columnas:
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY— un número entero único generado automáticamente para cada fila.UNSIGNEDsignifica sin negativos;PRIMARY KEYlo convierte en el identificador de la fila.VARCHAR(30)— texto de longitud variable de hasta 30 caracteres.NOT NULL— la columna siempre debe tener un valor.reg_date TIMESTAMP— se establece en la hora actual al insertar y se actualiza en cada modificación.
Nota: la sintaxis antigua de ancho de visualización INT(6) está obsoleta desde MySQL 8.0.17 y nunca afectó al almacenamiento ni al rango, por lo que se prefiere el simple INT.
Errores comunes y cómo solucionarlos
- "Access denied for user" — nombre de usuario o contraseña incorrectos, o el usuario no tiene el privilegio
CREATE. Verifica tus credenciales y permisos. - "Can't create database 'myDB'; database exists" — ya existe. Elimínala primero o usa
CREATE DATABASE IF NOT EXISTS. $conn->errorestá vacío pero la consulta falló — asegúrate de comparar con=== TRUE; unCREATEexitoso devuelve el booleanotrue, no un conjunto de resultados.
Próximos pasos
Una vez que tu base de datos y tus tablas existan, los siguientes pasos son insertar datos y leerlos de vuelta:
- Insert Data into MySQL — agrega filas con
INSERT INTO. - Select Data from MySQL — lee filas con
SELECT. - MySQL Prepared Statements — la forma segura de usar la entrada del usuario en las consultas.
- Create a MySQL Table — un análisis más detallado de
CREATE TABLE.
Conclusión
Crear una base de datos MySQL en PHP se reduce a tres pasos: abrir una conexión al servidor, ejecutar CREATE DATABASE y luego conectarse a esa base de datos y ejecutar CREATE TABLE. Verificar $conn->connect_error y el valor de retorno de query() en cada paso convierte los fallos silenciosos en mensajes claros — el hábito que hace confiable el resto de tu capa de datos.