MySQL: determinar qual banco de dados está selecionado?

242

Depois de ligar mysql_select_dbpara pegar um banco de dados, existe alguma maneira de exibir posteriormente o nome do banco de dados selecionado atualmente? Isso parece muito básico, mas não consegui encontrar nada no php.net ou no stackoverflow (todos os resultados são para "nenhum banco de dados selecionado").

andrewtweber
fonte

Respostas:

354

Apenas use mysql_query (ou mysqli_query, melhor ainda, ou use PDO, o melhor de tudo) com:

SELECT DATABASE() FROM DUAL;

Termo aditivo:

Há muita discussão sobre se FROM DUALdeve ou não ser incluído nisso ou não. Em um nível técnico, é uma reserva da Oracle e pode ser removida com segurança. Se você estiver inclinado, poderá usar o seguinte:

SELECT DATABASE();

Dito isto, talvez seja importante notar que, embora FROM DUALna verdade não faça nada, é uma sintaxe válida do MySQL. De uma perspectiva estrita, incluir chaves em uma única linha condicional no JavaScript também não faz nada , mas ainda é uma prática válida.

cwallenpoole
fonte
9
DUAL é uma tabela Oracle, que foi incorporada ao MySQL. É uma tabela fictícia para operações que não exigem uma tabela real. pt.wikipedia.org/wiki/DUAL_table
Jan Thomä 11/11
11
@DigitalPrecision É uma falha do fato de eu ter trabalhado muito com a Oracle. O Oracle não permite que você selecione, a menos que seja de alguma coisa; portanto, existe uma tabela especial chamada "DUAL", que possui apenas uma célula. Você pode omitir.
cwallenpoole
1
Provavelmente, deve editar isso mantendo a resposta existente para a posteridade, mas adicionando SELECT DATABASE();como a resposta "real".
Utilizador
@ JanThomä, então isso significa que posso executar qualquer consulta na tabela DUAL?
Pardeep Jain
1
@PardeepJain que está fora da minha área de atuação talvez a cwallenpoole possa responder a isso.
Jan Thomä
92
SELECT DATABASE();

ps Eu não queria ter a liberdade de modificar a resposta de @ cwallenpoole para refletir o fato de que essa é uma pergunta do MySQL e não da Oracle e não precisa DUAL.

Elijah Lynn
fonte
5
Velhos hábitos morrem com dificuldade. Eu ainda penso às vezes "FROM DUAL" mesmo que eu não toquei Oracle desde 2011.
cwallenpoole
5
Sim. Ainda pensando FROM DUAL mesmo que eu não toquei Oracle desde 2011.
cwallenpoole
9
Este sou eu de novo ... Ainda estou pensando.
precisa saber é o seguinte
2
@cwallenpoole você ainda está pensando?
precisa saber é o seguinte
4
@cwallenpoole e agora?
Nordle
47

Você sempre pode usar o comando STATUS para conhecer o banco de dados atual e o usuário atual

insira a descrição da imagem aqui

Mogli
fonte
embora não esteja refletido na saída acima, no meu sistema, também mostra a porta TCP, o que é útil para mim, pois estou executando o mysqld_multi e gosto de me lembrar em qual instância estou falando.
Jeff
9

Nos comentários de http://www.php.net/manual/de/function.mysql-db-name.php , encontrei este em ericpp% bigfoot.com:

Se você só precisa do nome do banco de dados atual, pode usar o comando SELECT DATABASE () do MySQL:

<?php
function mysql_current_db() {
    $r = mysql_query("SELECT DATABASE()") or die(mysql_error());
    return mysql_result($r,0);
}
?>
Jan Thomä
fonte
1
Porque o OP usou uma função PHP "mysql_select_db" e solicita PHP. Você realmente leu a pergunta?
Jan Thomä
1
Obrigado, sim, eu originalmente pedi uma resposta específica do PHP, caso houvesse um método como esse mysql_current_dbou algo assim. Alguém editado para remover "php" do título e Tag
andrewtweber
3
@mysql_result(mysql_query("SELECT DATABASE();"),0)

Se nenhum banco de dados selecionado, ou não houver conexão, ele retornará NULLo nome do banco de dados selecionado.


fonte
2

ligeiramente fora de tópico (usando a CLI em vez de PHP), mas ainda vale a pena conhecer: Você pode definir o prompt para exibir o banco de dados padrão usando qualquer um dos seguintes

mysql --prompt='\d> '
export MYSQL_PS1='\d> '

ou uma vez dentro

prompt \d>\_
\R \d>\_
Jeff
fonte
1

SELECT DATABASE() trabalhou no PHPMyAdmin.

Abhi Chavda
fonte
3
Isso é mais ou menos apenas uma repetição das respostas existentes.
28517 Pang
1
pode ser um comentário válido em qualquer resposta válida :)
Pardeep Jain
1

Outra maneira de filtrar o banco de dados com uma palavra específica.

SHOW DATABASES WHERE `Database` LIKE '<yourDatabasePrefixHere>%'
or
SHOW DATABASES LIKE '<yourDatabasePrefixHere>%';

Exemplo:

SHOW DATABASES WHERE `Database` LIKE 'foobar%'
foobar_animal
foobar_humans_gender
foobar_objects
Dexter
fonte