MySQL: determinare quale database è selezionato?


242

Dopo aver chiamato mysql_select_dbper afferrare un database, c'è un modo per generare successivamente il nome del database che è attualmente selezionato? Questo sembra molto semplice ma non ho trovato nulla su php.net o stackoverflow (tutti i risultati sono per "nessun database selezionato").

Risposte:


354

Usa mysql_query (o mysqli_query, anche meglio, oppure usa DOP, soprattutto) con:

SELECT DATABASE() FROM DUAL;

Addendum:

Si discute molto sull'opportunità o meno di FROM DUALincludere in questo. A livello tecnico, è un controllo di Oracle e può essere rimosso in modo sicuro. Se sei propenso, puoi invece utilizzare quanto segue:

SELECT DATABASE();

Detto questo, è forse importante notare che, sebbene in FROM DUALrealtà non faccia nulla, è una sintassi MySQL valida. Da una prospettiva rigorosa, anche le parentesi graffe in una sola riga condizionale in JavaScript non fanno nulla , ma è ancora una pratica valida.


9
DUAL è una tabella Oracle che è stata acquisita in MySQL. È una tabella fittizia per le operazioni che non richiedono una tabella effettiva. en.wikipedia.org/wiki/DUAL_table
Jan Thomä

11
@DigitalPrecision È una sorpresa dal fatto che ho lavorato molto con Oracle. Oracle non ti consente di selezionare a meno che non provenga da qualcosa, quindi c'è una tabella speciale chiamata "DUAL" che contiene solo una cella. Puoi ometterlo.
cwallenpoole,

1
Probabilmente dovrebbe modificarlo mantenendo la risposta esistente per i posteri ma aggiungendola SELECT DATABASE();come risposta "effettiva".
Utente

@ JanThomä in modo da poter eseguire qualsiasi query sulla tabella DUAL?
Pardeep Jain,

1
@PardeepJain che è al di fuori della mia area di competenza, forse cwallenpoole può rispondere.
Jan Thomä,

92
SELECT DATABASE();

ps Non volevo prendermi la libertà di modificare la risposta di @ cwallenpoole per riflettere il fatto che questa è una domanda MySQL e non una domanda Oracle e non è necessaria DUAL.


5
Le vecchie abitudini sono dure a morire. A volte continuo a pensare "DA DUAL" anche se non ho toccato Oracle dal 2011.
cwallenpoole,

5
Sì. Continuo a pensare DA DUAL anche se non ho toccato Oracle dal 2011.
cwallenpoole,

9
Sono di nuovo io ... Continuo a pensarci.
cwallenpoole,

2
@cwallenpoole ci stai ancora pensando?
Farhan.K,

4
@cwallenpoole che ne dici adesso?
Nordle,

47

È sempre possibile utilizzare il comando STATUS per conoscere il database corrente e l'utente corrente

inserisci qui la descrizione dell'immagine


sebbene non si rifletta nell'output sopra, sul mio sistema, mostra anche la porta TCP, che è utile per me poiché sto eseguendo mysqld_multi e mi piace ricordare a me stesso con quale istanza sto parlando.
Jeff,

9

Nei commenti di http://www.php.net/manual/de/function.mysql-db-name.php ho trovato questo da ericpp% bigfoot.com:

Se hai solo bisogno del nome del database corrente, puoi usare il comando SELECT DATABASE () di MySQL:

<?php
function mysql_current_db() {
    $r = mysql_query("SELECT DATABASE()") or die(mysql_error());
    return mysql_result($r,0);
}
?>

1
Perché l'OP ha utilizzato una funzione PHP "mysql_select_db" e chiede PHP. Hai davvero letto la domanda?
Jan Thomä,

1
Grazie, sì, avevo originariamente chiesto una risposta specifica per PHP nel caso ci fosse un metodo simile mysql_current_db o qualcosa del genere. Qualcuno lo ha modificato per rimuovere "php" dal titolo e dai tag
andrewtweber,

3
@mysql_result(mysql_query("SELECT DATABASE();"),0)

Se non è stato selezionato alcun database o non è presente alcuna connessione, viene restituito NULLaltrimenti il ​​nome del database selezionato.


2

leggermente fuori tema (utilizzando l'interfaccia della riga di comando anziché PHP), ma vale comunque la pena sapere: è possibile impostare il prompt per visualizzare il database predefinito utilizzando uno dei seguenti

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

o una volta dentro

prompt \d>\_
\R \d>\_

1

SELECT DATABASE() lavorato in PHPMyAdmin.


3
Questa è più o meno solo una ripetizione delle risposte esistenti.
Ha

1
può essere un commento valido su qualsiasi risposta valida :)
Pardeep Jain

1

Un altro modo per filtrare il database con una parola specifica.

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

Esempio:

SHOW DATABASES WHERE `Database` LIKE 'foobar%'
foobar_animal
foobar_humans_gender
foobar_objects
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.