MySQL: określ, która baza danych jest wybrana?

242

Czy po wywołaniu mysql_select_dbbazy danych jest jakiś sposób na późniejsze wyświetlenie nazwy wybranej bazy danych? Wydaje się to bardzo proste, ale nie mogłem znaleźć niczego na php.net lub stackoverflow (wszystkie wyniki dotyczą „nie wybrano bazy danych”).

andrewtweber
źródło

Odpowiedzi:

354

Wystarczy użyć mysql_query (lub mysqli_query, jeszcze lepiej, lub użyć PDO, najlepiej ze wszystkich) z:

SELECT DATABASE() FROM DUAL;

Uzupełnienie:

Toczy się wiele dyskusji na temat tego, czy FROM DUALnależy to uwzględnić, czy nie. Na poziomie technicznym jest to pozostałość Oracle i można go bezpiecznie usunąć. Jeśli masz skłonność, możesz zamiast tego użyć następujących opcji:

SELECT DATABASE();

To powiedziawszy, być może ważne jest, aby zauważyć, że chociaż FROM DUALtak naprawdę nic nie robi , jest to poprawna składnia MySQL. Z ścisłego punktu widzenia, w tym nawiasy klamrowe w jednym wierszu warunkowe w JavaScript również nic nie robią , ale nadal jest to poprawna praktyka.

cwallenpoole
źródło
9
DUAL to tabela Oracle, która została przejęta do MySQL. To fikcyjny stół do operacji, które nie wymagają rzeczywistego stołu. en.wikipedia.org/wiki/DUAL_table
Jan Thomä 11.11.11
11
@DigitalPrecision Jest to pozostałość po tym, że wykonałem dużo pracy z Oracle. Oracle nie pozwala ci wybierać, chyba że pochodzi z czegoś, więc istnieje specjalna tabela o nazwie „DUAL”, która zawiera tylko jedną komórkę. Możesz to pominąć.
cwallenpoole,
1
Prawdopodobnie powinien to zmienić, zachowując istniejącą odpowiedź dla potomności, ale dodając SELECT DATABASE();jako „rzeczywistą” odpowiedź.
Użytkownik
@ JanThomä, co oznacza, że ​​mogę wykonać dowolne zapytanie na tabeli DUAL?
Pardeep Jain
1
@PardeepJain, który jest poza moim obszarem specjalizacji, może cwallenpoole może na to odpowiedzieć.
Jan Thomä
92
SELECT DATABASE();

ps Nie chciałem modyfikować odpowiedzi @ cwallenpoole, aby odzwierciedlić fakt, że jest to pytanie MySQL, a nie pytanie Oracle i nie potrzebuje DUAL.

Elijah Lynn
źródło
5
Stare zwyczaje umierają ciężko. I jeszcze czasami myśleć „FROM dual”, mimo że nie dotknęła Oracle od 2011 roku
cwallenpoole
5
Tak. Wciąż myśli from dual mimo że nie dotknęła Oracle od 2011 roku
cwallenpoole
9
To znowu ja… Wciąż o tym myślę.
cwallenpoole,
2
@cwallenpoole, czy nadal o tym myślisz?
Farhan.K
4
@cwallenpoole co powiesz teraz?
Nordle
47

Zawsze możesz użyć polecenia STATUS, aby poznać aktualną bazę danych i bieżącego użytkownika

wprowadź opis zdjęcia tutaj

Mogli
źródło
chociaż nie znalazło to odzwierciedlenia w wynikach powyżej, w moim systemie pokazuje także port TCP, co jest dla mnie przydatne, ponieważ uruchamiam mysqld_multi i lubię sobie przypominać, z którym wystąpieniem rozmawiam.
Jeff
9

W komentarzach http://www.php.net/manual/de/function.mysql-db-name.php znalazłem ten z ericpp% bigfoot.com:

Jeśli potrzebujesz tylko bieżącej nazwy bazy danych, możesz użyć komendy SELECT DATABASE () MySQL:

<?php
function mysql_current_db() {
    $r = mysql_query("SELECT DATABASE()") or die(mysql_error());
    return mysql_result($r,0);
}
?>
Jan Thomä
źródło
1
Ponieważ OP użył funkcji PHP „mysql_select_db” i prosi o PHP. Czy rzeczywiście przeczytałeś pytanie?
Jan Thomä,
1
Dzięki, tak, pierwotnie poprosiłem o odpowiedź specyficzną dla PHP na wypadek, gdyby istniała jakaś metoda mysql_current_dblub coś takiego. Ktoś go edytował, aby usunąć „php” z tytułu i tagów
andrewtweber
3
@mysql_result(mysql_query("SELECT DATABASE();"),0)

Jeśli nie wybrano bazy danych lub nie ma połączenia, w NULLprzeciwnym razie zwraca nazwę wybranej bazy danych.


źródło
2

nieco nie na temat (za pomocą CLI zamiast PHP), ale nadal warto wiedzieć: Można ustawić monit o wyświetlanie domyślnej bazy danych za pomocą jednego z poniższych

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

lub raz w środku

prompt \d>\_
\R \d>\_
Jeff
źródło
1

SELECT DATABASE() pracował w PHPMyAdmin.

Abhi Chavda
źródło
3
To mniej więcej powtórzenie istniejących odpowiedzi.
Pang
1
może być poprawnym komentarzem do każdej poprawnej odpowiedzi :)
Pardeep Jain
1

Kolejny sposób na filtrowanie bazy danych za pomocą określonego słowa.

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

Przykład:

SHOW DATABASES WHERE `Database` LIKE 'foobar%'
foobar_animal
foobar_humans_gender
foobar_objects
Dexter
źródło