MySQL: déterminer quelle base de données est sélectionnée?

242

Après avoir appelé mysql_select_dbpour récupérer une base de données, existe-t-il un moyen de sortir ultérieurement le nom de la base de données actuellement sélectionnée? Cela semble très basique mais je n'ai rien trouvé sur php.net ou stackoverflow (tous les résultats sont pour "aucune base de données sélectionnée").

andrewtweber
la source

Réponses:

354

Utilisez simplement mysql_query (ou mysqli_query, encore mieux, ou utilisez PDO, le meilleur de tous) avec:

SELECT DATABASE() FROM DUAL;

Addenda:

Il y a beaucoup de discussions sur l'opportunité d' FROM DUALinclure ou non cela. Sur le plan technique, il s'agit d'un reliquat d'Oracle et peut être supprimé en toute sécurité. Si vous êtes enclin, vous pouvez utiliser les éléments suivants à la place:

SELECT DATABASE();

Cela dit, il est peut-être important de noter que, bien qu'il FROM DUALne fasse rien, c'est une syntaxe MySQL valide. D'un point de vue strict, inclure des accolades sur une seule ligne conditionnelle en JavaScript ne fait rien non plus , mais c'est toujours une pratique valide.

cwallenpoole
la source
9
DUAL est une table Oracle, qui a été reprise dans MySQL. Il s'agit d'une table factice pour les opérations qui ne nécessitent pas de table réelle. en.wikipedia.org/wiki/DUAL_table
Jan Thomä
11
@DigitalPrecision C'est une conséquence du fait que j'ai fait beaucoup de travail avec Oracle. Oracle ne vous permet pas de sélectionner à moins qu'il ne provienne de quelque chose, il y a donc un tableau spécial appelé "DUAL" qui ne contient qu'une seule cellule. Vous pouvez l'omettre.
cwallenpoole
1
Vous devriez probablement modifier cela en conservant la réponse existante pour la postérité mais en l'ajoutant SELECT DATABASE();comme réponse "réelle".
Utilisateur
@ JanThomä donc cela signifie que je peux effectuer n'importe quelle requête sur la table DUAL?
Pardeep Jain
1
@PardeepJain qui est en dehors de mon domaine d'expertise peut-être que cwallenpoole peut répondre à cela.
Jan Thomä
92
SELECT DATABASE();

ps Je ne voulais pas prendre la liberté de modifier la réponse de @ cwallenpoole pour refléter le fait qu'il s'agit d'une question MySQL et non d'une question Oracle et qu'elle n'a pas besoin DUAL.

Elijah Lynn
la source
5
Les vieilles habitudes ont la vie dure. Je pense toujours "FROM DUAL" même si je n'ai pas touché Oracle depuis 2011.
cwallenpoole
5
Oui. Je pense toujours à DUAL même si je n'ai pas touché Oracle depuis 2011.
cwallenpoole
9
C'est encore moi… Toujours en train de le penser.
cwallenpoole
2
@cwallenpoole y pensez-vous toujours?
Farhan.K
4
@cwallenpoole et maintenant?
Nordle
47

Vous pouvez toujours utiliser la commande STATUS pour connaître la base de données actuelle et l'utilisateur actuel

entrez la description de l'image ici

Mogli
la source
bien que non reflété dans la sortie ci-dessus, sur mon système, il montre également le port TCP, ce qui est pratique pour moi car j'utilise mysqld_multi et j'aime me rappeler à quelle instance je parle.
Jeff
9

Dans les commentaires de http://www.php.net/manual/de/function.mysql-db-name.php, j'ai trouvé celui-ci sur ericpp% bigfoot.com:

Si vous avez juste besoin du nom de la base de données actuelle, vous pouvez utiliser la commande SELECT DATABASE () de MySQL:

<?php
function mysql_current_db() {
    $r = mysql_query("SELECT DATABASE()") or die(mysql_error());
    return mysql_result($r,0);
}
?>
Jan Thomä
la source
1
Parce que l'OP a utilisé une fonction PHP "mysql_select_db" et demande PHP. Avez-vous réellement lu la question?
Jan Thomä
1
Merci, oui, j'avais initialement demandé une réponse spécifique à PHP au cas où il y aurait une méthode comme mysql_current_dbou quelque chose. Quelqu'un l'a modifié pour supprimer "php" du titre et des balises
andrewtweber
3
@mysql_result(mysql_query("SELECT DATABASE();"),0)

Si aucune base de données n'est sélectionnée ou s'il n'y a pas de connexion, elle renvoie NULLsinon le nom de la base de données sélectionnée.


la source
2

légèrement hors sujet (en utilisant la CLI au lieu de PHP), mais vaut la peine d'être connu: vous pouvez définir l'invite pour afficher la base de données par défaut en utilisant l'une des options suivantes

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

ou une fois à l'intérieur

prompt \d>\_
\R \d>\_
Jeff
la source
1

SELECT DATABASE() travaillé dans PHPMyAdmin.

Abhi Chavda
la source
3
Il s'agit plus ou moins d'une répétition des réponses existantes.
Pang
1
peut être un commentaire valide sur toute réponse valide :)
Pardeep Jain
1

Une autre façon de filtrer la base de données avec un mot spécifique.

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

Exemple:

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