MySQL: tentukan database mana yang dipilih?


242

Setelah menelepon mysql_select_dbuntuk mengambil basis data, adakah cara untuk nanti menampilkan nama basis data yang saat ini dipilih? Ini tampaknya sangat mendasar tetapi saya tidak dapat menemukan apa pun di php.net atau stackoverflow (semua hasil adalah untuk "tidak ada database yang dipilih").

Jawaban:


354

Cukup gunakan mysql_query (atau mysqli_query, bahkan lebih baik, atau gunakan PDO, yang terbaik) dengan:

SELECT DATABASE() FROM DUAL;

Tambahan:

Ada banyak diskusi tentang apakah FROM DUALharus dimasukkan dalam ini atau tidak. Pada tingkat teknis, ini adalah peninggalan dari Oracle dan dapat dihapus dengan aman. Jika Anda cenderung, Anda dapat menggunakan yang berikut ini sebagai gantinya:

SELECT DATABASE();

Yang mengatakan, mungkin penting untuk dicatat, bahwa sementara FROM DUALtidak benar - benar melakukan apa - apa, itu adalah sintaks MySQL yang valid. Dari perspektif yang ketat, termasuk kawat gigi dalam satu baris bersyarat dalam JavaScript juga tidak melakukan apa-apa , tetapi masih merupakan praktik yang valid.


9
DUAL adalah tabel Oracle, yang diambil alih ke dalam MySQL. Ini adalah tabel dummy untuk operasi yang tidak memerlukan tabel sebenarnya. en.wikipedia.org/wiki/DUAL_table
Jan Thomä

11
@DigitalPrecision Ini adalah peninggalan dari kenyataan bahwa saya telah melakukan banyak pekerjaan dengan Oracle. Oracle tidak mengizinkan Anda memilih kecuali dari sesuatu, jadi ada tabel khusus yang disebut "DUAL" yang hanya memiliki satu sel di dalamnya. Anda bisa menghilangkannya.
cwallenpoole

1
Mungkin harus mengedit ini menjaga jawaban yang ada untuk anak cucu tetapi menambahkan SELECT DATABASE();sebagai jawaban "aktual".
Pengguna

@ JanThomä jadi itu artinya saya bisa melakukan kueri apa pun di tabel DUAL?
Pardeep Jain

1
@PardeepJain yang berada di luar bidang keahlian saya, mungkin cwallenpoole dapat menjawabnya.
Jan Thomä

92
SELECT DATABASE();

ps Saya tidak ingin mengambil kebebasan memodifikasi jawaban @ cwallenpoole untuk mencerminkan fakta bahwa ini adalah pertanyaan MySQL dan bukan pertanyaan Oracle dan tidak perlu DUAL.


5
Kebiasaan susah hilang. Saya terkadang masih berpikir "FROM DUAL" walaupun saya belum menyentuh Oracle sejak 2011.
cwallenpoole

5
Ya. Masih berpikir dari DUAL walaupun saya belum menyentuh Oracle sejak 2011.
cwallenpoole

9
Ini saya lagi ... Masih memikirkannya.
cwallenpoole

2
@cwallenpoole apakah Anda masih memikirkannya?
Farhan.K

4
@cwallenpoole bagaimana kalau sekarang?
Nordle

47

Anda selalu dapat menggunakan perintah STATUS untuk mengenal Basis data saat ini & Pengguna Saat Ini

masukkan deskripsi gambar di sini


meskipun tidak tercermin dalam output di atas, pada sistem saya, ini juga menunjukkan port TCP, yang berguna bagi saya karena saya menjalankan mysqld_multi dan saya ingin mengingatkan diri sendiri ke instance mana saya berbicara.
Jeff

9

Dalam komentar di http://www.php.net/manual/de/function.mysql-db-name.php Saya menemukan ini dari ericpp% bigfoot.com:

Jika Anda hanya perlu nama database saat ini, Anda dapat menggunakan perintah MySQL SELECT DATABASE ():

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

1
Karena OP menggunakan fungsi PHP "mysql_select_db" dan meminta PHP. Apakah Anda benar-benar membaca pertanyaannya?
Jan Thomä

1
Terima kasih, ya saya awalnya meminta jawaban khusus PHP jika ada metode seperti mysql_current_dbatau sesuatu. Seseorang mengeditnya untuk menghapus "php" dari judul dan tag
andrewtweber

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

Jika tidak ada database yang dipilih, atau tidak ada koneksi, ia akan mengembalikan NULLnama database yang dipilih.


2

sedikit di luar topik (menggunakan CLI alih-alih PHP), tetapi masih perlu diketahui: Anda dapat mengatur prompt untuk menampilkan database default dengan menggunakan salah satu dari yang berikut ini

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

atau sekali di dalam

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

1

SELECT DATABASE() bekerja di PHPMyAdmin.


3
Ini kurang lebih hanyalah pengulangan dari jawaban yang ada.
Pang

1
dapat menjadi komentar yang valid pada jawaban yang valid :)
Pardeep Jain

1

Cara lain untuk memfilter basis data dengan kata tertentu.

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

Contoh:

SHOW DATABASES WHERE `Database` LIKE 'foobar%'
foobar_animal
foobar_humans_gender
foobar_objects
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.