W3docs

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ámetroDescripción
$connectionEl enlace de conexión devuelto por mysqli_connect(). Obligatorio.
$databaseEl 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

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.

Práctica

Práctica
¿Cuál es el propósito de la función select_db() en PHP?
¿Cuál es el propósito de la función select_db() en PHP?
Was this page helpful?