MySQL: визначте, яку базу даних обрано?


242

Після заклику mysql_select_dbзахопити базу даних, чи є можливість пізніше вивести ім'я бази даних, яку зараз вибрано? Це здається дуже базовим, але я не зміг знайти нічого на php.net або stackoverflow (усі результати призначені для "не вибрано базу даних").

Відповіді:


354

Просто використовуйте mysql_query (або mysqli_query, ще краще, або використовуйте PDO, найкраще) з:

SELECT DATABASE() FROM DUAL;

Додаток:

Існує багато дискусій з приводу того, FROM DUALслід чи ні включати до цього чи ні. На технічному рівні він є переходом від Oracle і може бути безпечно видалений. Якщо ви схильні, замість цього ви можете використовувати наступне:

SELECT DATABASE();

Однак, мабуть, важливо зазначити, що, хоча FROM DUALнасправді нічого не робить , це синтаксис MySQL. Зі строгої точки зору, включення дужок в один рядок, умовний в JavaScript, також нічого не робить , але це все-таки є дійсною практикою.


9
DUAL - це таблиця Oracle, яка була передана в MySQL. Це фіктивна таблиця для операцій, які не потребують фактичної таблиці. en.wikipedia.org/wiki/DUAL_table
Ян Тома

11
@DigitalPrecision Це відступ від того, що я багато працював з Oracle. Oracle не дозволяє вам вибрати, якщо це не з чогось, тому існує спеціальна таблиця під назвою "DUAL", в якій є лише одна комірка. Ви можете його опустити.
cwallenpoole

1
Ймовірно, слід відредагувати це, зберігаючи існуючу відповідь для нащадків, але додавши SELECT DATABASE();як "фактичну" відповідь.
Користувач

@ JanThomä, що означає, що я можу виконувати будь-який запит на таблиці DUAL?
Pardeep Jain

1
@PardeepJain, який знаходиться поза моєю областю знань, можливо, cwallenpoole може відповісти на це.
Ян Тома

92
SELECT DATABASE();

ps Я не хотів сміливо змінювати відповідь @ cwallenpoole, щоб відобразити той факт, що це питання MySQL, а не питання Oracle і не потрібно DUAL.


5
Старі звички важко вмирають. Я все ще часом думаю "З ДУАЛЬНОГО", хоча я не торкався Oracle з 2011 року
cwallenpoole

5
Так. Тим НЕ менше думати FROM DUAL , навіть якщо я не доторкнувся Oracle з 2011 року
cwallenpoole

9
Це я знову ... Все ще думаю.
cwallenpoole

2
@cwallenpoole ти це все ще думаєш?
Farhan.K

4
@cwallenpoole як тепер?
Нордл

47

Ви завжди можете використовувати команду STATUS для ознайомлення з поточною базою даних та поточним користувачем

введіть тут опис зображення


Хоча це не відображено у вихідних даних на моїй системі, він також показує порт TCP, який для мене зручний, оскільки я запускаю mysqld_multi, і мені подобається нагадувати собі, про який екземпляр я говорю.
Джефф

9

У коментарях о http://www.php.net/manual/de/function.mysql-db-name.php я знайшов цей із ericpp% bigfoot.com:

Якщо вам просто потрібно поточне ім'я бази даних, ви можете використовувати команду SELECT DATABASE () MySQL:)

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

1
Оскільки ОП використовував функцію PHP "mysql_select_db" і просить PHP. Ви насправді читали питання?
Ян Тома

1
Дякую, так, я спочатку попросив відповідь, що стосується PHP, у випадку, якщо є такий спосіб mysql_current_dbчи щось подібне. Хтось редагував його, щоб видалити "php" із заголовка та тегів
andrewtweber

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

Якщо не вибрано базу даних, або немає з'єднання, вона NULLінакше поверне ім'я вибраної бази даних.


2

трохи поза темою (використовуючи CLI замість PHP), але все-таки варто знати: Ви можете встановити підказку для відображення бази даних за замовчуванням, використовуючи будь-яке з наведених нижче

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

або один раз всередину

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

1

SELECT DATABASE() працював у PHPMyAdmin.


3
Це більш-менш лише повторення існуючих відповідей.
Панг

1
може бути вагомим коментарем до будь-якої достовірної відповіді :)
Pardeep Jain

1

Ще один спосіб фільтрації бази даних за допомогою конкретного слова.

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

Приклад:

SHOW DATABASES WHERE `Database` LIKE 'foobar%'
foobar_animal
foobar_humans_gender
foobar_objects
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.