Guía completa sobre la función mysqli_select_db en PHP
Aprende a usar mysqli_select_db() en PHP para cambiar la base de datos activa en una conexión MySQL existente, con ejemplos y errores comunes.
La función mysqli_select_db() cambia la base de datos predeterminada (activa) de una conexión MySQL existente. Una vez seleccionada una base de datos, todas las consultas posteriores que se ejecuten en esa conexión — SELECT, INSERT, UPDATE, etc. — apuntarán a ella, a menos que califiques completamente el nombre de una tabla (p. ej., other_db.users).
En la mayoría de los casos, la base de datos se establece al abrir la conexión con mysqli_connect(), por lo que nunca necesitas llamar a mysqli_select_db(). Esta función es útil en una situación concreta: cuando una sola conexión necesita trabajar con más de una base de datos y quieres cambiar la activa sin reconectar.
Esta guía explica la sintaxis, el valor de retorno, cuándo realmente necesitas la función y los errores más comunes que debes evitar.
Sintaxis
mysqli_select_db(mysqli $connection, string $database): bool| Parámetro | Descripción |
|---|---|
$connection | El enlace de conexión devuelto por mysqli_connect(). Obligatorio. |
$database | El nombre de la base de datos que se establecerá como predeterminada para esta conexión. |
En el estilo orientado a objetos, la misma operación es un método del objeto de conexión:
$connection->select_db($database);Valor de retorno
mysqli_select_db() devuelve un booleano:
true— la base de datos se seleccionó correctamente.false— la base de datos no existe, el usuario no tiene permisos o la conexión no es válida.
Como devuelve un booleano, siempre comprueba el resultado en lugar de asumir el éxito. En caso de fallo, mysqli_error() te indica la causa.
Un ejemplo completo y ejecutable
El fragmento de código siguiente se conecta sin especificar una base de datos y luego selecciona una explícitamente y ejecuta una consulta contra ella. Reemplaza las credenciales por las tuyas para ejecutarlo contra un servidor real.
<?php
// 1. Connect WITHOUT choosing a database yet.
$connection = mysqli_connect('localhost', 'username', 'password');
if (!$connection) {
die('Connection failed: ' . mysqli_connect_error());
}
// 2. Pick the database this connection should use.
if (mysqli_select_db($connection, 'shop')) {
echo "Database 'shop' selected.\n";
} else {
die("Could not select database: " . mysqli_error($connection));
}
// 3. Every query now runs against 'shop'.
$result = mysqli_query($connection, 'SELECT name FROM products LIMIT 1');
mysqli_close($connection);Cuándo realmente la necesitas
Normalmente pasas el nombre de la base de datos directamente a mysqli_connect():
// The 4th argument selects the database immediately — no select_db() needed.
$connection = mysqli_connect('localhost', 'username', 'password', 'shop');Recurre a mysqli_select_db() solo cuando necesites cambiar de base de datos en una conexión abierta, por ejemplo, un script de informes que copia filas entre dos bases de datos en el mismo servidor:
<?php
$connection = mysqli_connect('localhost', 'username', 'password');
// Read from the live database.
mysqli_select_db($connection, 'live');
$rows = mysqli_query($connection, 'SELECT id, total FROM orders');
// Switch the same connection to the archive database and write there.
mysqli_select_db($connection, 'archive');
// ... insert $rows into archive.orders ...
mysqli_close($connection);Cambiar con mysqli_select_db() es más económico que abrir una segunda conexión, que es precisamente para lo que existe.
Errores comunes
- Ignorar el valor de retorno. Una selección fallida deja la base de datos anterior activa (o ninguna), por lo que las consultas posteriores afectan silenciosamente a las tablas incorrectas. Siempre ramifica en función del booleano.
- Orden incorrecto de los argumentos. La conexión va primero y el nombre de la base de datos segundo:
mysqli_select_db($connection, 'shop'). Invertirlos es un error frecuente. - Confundirla con
mysqli_connect().select_db()no autentica ni abre nada — solo cambia la base de datos predeterminada de una conexión que ya existe. - Inyección SQL a partir de entrada del usuario. Un nombre de base de datos es un identificador y no puede parametrizarse con una sentencia preparada. Nunca lo construyas a partir de entrada de usuario sin procesar; restringe los valores a una lista de nombres conocidos y permitidos.
Funciones relacionadas
mysqli_connect()— abre una conexión (y opcionalmente selecciona una base de datos en un solo paso).mysqli_query()— ejecuta SQL contra la base de datos actualmente seleccionada.mysqli_fetch_assoc()— lee filas de resultados como arrays asociativos.- Resumen de PHP MySQLi — la extensión mysqli completa de un vistazo.
Conclusión
mysqli_select_db() establece la base de datos predeterminada para una conexión MySQL existente. Prefiere seleccionar la base de datos directamente en mysqli_connect() y reserva mysqli_select_db() para el caso para el que fue creada: cambiar entre bases de datos en una sola conexión. Independientemente de cuál uses, comprueba siempre el valor de retorno booleano para que una selección fallida nunca dirija tus consultas a la base de datos incorrecta.