W3docs

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. UNSIGNED significa sin negativos; PRIMARY KEY lo 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->error está vacío pero la consulta falló — asegúrate de comparar con === TRUE; un CREATE exitoso devuelve el booleano true, 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:

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.

Práctica

Práctica
¿Cuál es la sintaxis correcta para crear una base de datos en PHP usando MySQLi?
¿Cuál es la sintaxis correcta para crear una base de datos en PHP usando MySQLi?
Was this page helpful?