Guia Completo sobre a Função mysqli_select_db no PHP
Aprenda a usar mysqli_select_db() no PHP para alternar entre bancos de dados MySQL em uma única conexão, com exemplos e erros comuns a evitar.
A função mysqli_select_db() altera o banco de dados padrão (ativo) de uma conexão MySQL existente. Após selecionar um banco de dados, cada consulta subsequente executada nessa conexão — SELECT, INSERT, UPDATE, entre outras — terá como alvo esse banco de dados, a menos que você qualifique completamente o nome de uma tabela (por exemplo, other_db.users).
Na maioria das vezes, você define o banco de dados ao abrir a conexão com mysqli_connect(), sem precisar chamar mysqli_select_db(). Ela se torna útil em uma situação específica: quando uma única conexão precisa trabalhar com mais de um banco de dados e você deseja alternar o ativo sem reconectar.
Este guia explica a sintaxe, o valor de retorno, quando você realmente precisa da função e os erros comuns a evitar.
Sintaxe
mysqli_select_db(mysqli $connection, string $database): bool| Parâmetro | Descrição |
|---|---|
$connection | O link de conexão retornado por mysqli_connect(). Obrigatório. |
$database | O nome do banco de dados a definir como padrão para esta conexão. |
No estilo orientado a objetos, a mesma operação é um método no objeto de conexão:
$connection->select_db($database);Valor de retorno
mysqli_select_db() retorna um booleano:
true— o banco de dados foi selecionado com sucesso.false— o banco de dados não existe, o usuário não tem permissão ou a conexão é inválida.
Por retornar um booleano, sempre verifique o resultado em vez de presumir sucesso. Em caso de falha, mysqli_error() fornece o motivo.
Um exemplo completo e executável
O trecho abaixo conecta sem nomear um banco de dados, depois seleciona um explicitamente e executa uma consulta contra ele. Substitua as credenciais pelas suas para executá-lo em um 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);Quando você realmente precisa dela
Normalmente você passa o nome do banco de dados diretamente para mysqli_connect():
// The 4th argument selects the database immediately — no select_db() needed.
$connection = mysqli_connect('localhost', 'username', 'password', 'shop');Use mysqli_select_db() apenas quando precisar alternar bancos de dados em uma conexão aberta, por exemplo, um script de relatório que copia linhas entre dois bancos de dados no mesmo 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);Alternar com mysqli_select_db() é mais barato do que abrir uma segunda conexão, e é por isso que a função existe.
Erros comuns
- Ignorar o valor de retorno. Uma seleção com falha deixa o banco de dados anterior ativo (ou nenhum), fazendo com que consultas posteriores acessem silenciosamente as tabelas erradas. Sempre verifique o booleano.
- Ordem incorreta dos argumentos. A conexão vem primeiro, o nome do banco de dados depois:
mysqli_select_db($connection, 'shop'). Inverter a ordem é um erro frequente. - Confundi-la com
mysqli_connect().select_db()não autentica nem abre nada — apenas altera o banco de dados padrão de uma conexão que já existe. - Injeção SQL a partir de entrada do usuário. Um nome de banco de dados é um identificador e não pode ser parametrizado com uma declaração preparada. Nunca o construa a partir de entrada bruta do usuário; restrinja-o a uma lista de permissões fixa de nomes conhecidos.
Funções relacionadas
mysqli_connect()— abrir uma conexão (e opcionalmente selecionar um banco de dados em uma etapa).mysqli_query()— executar SQL contra o banco de dados atualmente selecionado.mysqli_fetch_assoc()— ler linhas de resultado como arrays associativos.- Visão geral do PHP MySQLi — a extensão mysqli completa em uma visão geral.
Conclusão
mysqli_select_db() define o banco de dados padrão para uma conexão MySQL existente. Prefira selecionar o banco de dados diretamente em mysqli_connect(), e reserve mysqli_select_db() para o caso para o qual foi criada: alternar entre bancos de dados em uma única conexão. Independentemente do que usar, sempre verifique o valor de retorno booleano para que uma seleção com falha nunca envie suas consultas ao banco de dados errado.