MySQL: определить, какая база данных выбрана?


243

После вызова, mysql_select_dbчтобы получить базу данных, есть ли способ позже вывести имя базы данных, которая в данный момент выбрана? Это кажется очень простым, но я не смог найти ничего на php.net или stackoverflow (все результаты для «база данных не выбрана»).

Ответы:


355

Просто используйте 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ä, значит, я могу выполнить любой запрос к ДВОЙНОЙ таблице?
Пардип Джейн

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

92
SELECT DATABASE();

ps Я не хотел позволять себе изменять ответ @ cwallenpoole, чтобы отразить тот факт, что это вопрос MySQL, а не вопрос Oracle, и он не нужен DUAL.


5
Старые привычки умирают с трудом. Я до сих пор иногда думаю «ОТ ДВОЙНОГО», хотя я не касался Oracle с 2011 года.
cwallenpoole

5
Ага. Все еще думаю ОТ ДВОЙНОГО, хотя я не касался Oracle с 2011 года.
cwallenpoole

9
Это снова я ... Все еще думаю об этом.
cwallenpoole

2
@cwallenpoole ты все еще думаешь об этом?
Farhan.K

4
@cwallenpoole как насчет сейчас?
Nordle

47

Вы всегда можете использовать команду STATUS, чтобы узнать текущую базу данных и текущего пользователя

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


хотя это не отражено в выводе выше, в моей системе он также показывает порт TCP, что удобно для меня, так как я использую mysqld_multi и мне хотелось бы напомнить себе, с каким экземпляром я говорю.
Джефф

9

В комментариях http://www.php.net/manual/de/function.mysql-db-name.php я нашел это на ericpp% bigfoot.com:

Если вам просто нужно текущее имя базы данных, вы можете использовать команду MySQL SELECT DATABASE ():

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

1
Потому что OP использовал функцию 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.