MySQL: hangi veritabanının seçildiğini belirler?


242

mysql_select_dbBir veritabanı kapmak için çağırdıktan sonra , daha sonra seçili veritabanı adını çıktısı için herhangi bir yolu var mı? Bu çok temel görünüyor ama php.net veya stackoverflow (tüm sonuçlar "hiçbir veritabanı seçili" içindir) bir şey bulamadık.

Yanıtlar:


354

Sadece mysql_query (veya mysqli_query, daha da iyisi kullanın veya en iyisi PDO kullanın):

SELECT DATABASE() FROM DUAL;

Zeyilname:

Buna FROM DUALdahil edilip edilmeyeceği konusunda çok fazla tartışma var . Teknik düzeyde, Oracle'dan bir engeldir ve güvenle kaldırılabilir. Eğimli iseniz, bunun yerine aşağıdakileri kullanabilirsiniz:

SELECT DATABASE();

Bununla birlikte, FROM DUALaslında hiçbir şey yapmasa da, geçerli MySQL sözdizimi olduğunu belirtmek belki de önemlidir . Sıkı bir bakış açısıyla, JavaScript'te koşullu tek bir satıra parantez eklemek de hiçbir şey yapmaz , ancak yine de geçerli bir uygulamadır.


9
DUAL, MySQL'e aktarılan bir Oracle tablosudur. Gerçek bir tablo gerektirmeyen işlemler için sahte bir tablodur. en.wikipedia.org/wiki/DUAL_table
Jan Thomä

11
@DigitalPrecision Oracle ile çok çalışmamın bir sakıncası. Oracle olmadıkça seçmenize izin vermiyor dan yüzden tek hücreyi yok "ÇİFT" adı verilen özel bir masa var, bir şey. Bunu atlayabilirsiniz.
cwallenpoole

1
Muhtemelen bunu gelecek kuşak için mevcut cevabı koruyarak düzenlemeli ama SELECT DATABASE();"gerçek" cevap olarak eklemelidir .
Kullanıcı

@ JanThomä yani DUAL tablosunda herhangi bir sorgu yapabilir miyim?
Pardeep Jain

1
@PardeepJain benim uzmanlık alanım dışında belki cwallenpoole buna cevap verebilir.
Jan Thomä

92
SELECT DATABASE();

ps Ben bu bir Oracle sorusu değil, bir MySQL soru olduğunu ve gerek yok gerçeğini yansıtmak için @ cwallenpoole cevap cevap değiştirme özgürlüğünü almak istemiyordu DUAL.


5
Eski alışkanlıklar zor bırakılır. Ben hala bazen 2011 yılından beri ben Oracle dokunmadım bile "DUAL DAN" düşünmek
cwallenpoole

5
Evet. Hala düşünüyorum DUAL DAN ben 2011'den beri Oracle dokunmadım bile olsa
cwallenpoole

9
Bu yine benim… Hala düşünüyor.
cwallenpoole

2
@cwallenpoole hala düşünüyorsun?
Farhan.K

4
@cwallenpoole şimdi nasıl?
Nordle

47

Geçerli veritabanını ve Geçerli Kullanıcıyı tanımak için her zaman STATUS komutunu kullanabilirsiniz

resim açıklamasını buraya girin


yukarıdaki çıktıya yansıtılmasa da, sistemimde, aynı zamanda benim için kullanışlı olan TCP bağlantı noktasını da gösteriyor, çünkü mysqld_multi'yi çalıştırıyorum ve hangi örneğe konuştuğumu hatırlatmak istiyorum.
Jeff

9

Http://www.php.net/manual/de/function.mysql-db-name.php yorumlarında bunu ericpp% bigfoot.com adresinden buldum:

Sadece geçerli veritabanı adına ihtiyacınız varsa, MySQL'in SELECT DATABASE () komutunu kullanabilirsiniz:

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

1
OP bir PHP işlevi "mysql_select_db" kullandığından ve PHP ister. Soruyu gerçekten okudun mu?
Jan Thomä

1
Teşekkürler, evet gibi bir yöntem mysql_current_dbya da bir şey olması durumunda aslında PHP'ye özel bir cevap istedi . Birisi başlık ve etiketleri "php" kaldırmak için düzenledi
andrewtweber

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

Seçili veritabanı yoksa veya bağlantı NULLyoksa, aksi takdirde seçilen veritabanının adını döndürür .


2

biraz konu dışı (PHP yerine CLI kullanarak), ama yine de bilmeye değer: Aşağıdakilerden birini kullanarak varsayılan veritabanını görüntüleme istemini ayarlayabilirsiniz

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

veya içeride bir kez

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

1

SELECT DATABASE() PHPMyAdmin'de çalıştı.


3
Bu az çok mevcut cevapların tekrarıdır.
Pang

1
herhangi bir geçerli cevap için geçerli bir yorum olabilir :)
Pardeep Jain

1

Veritabanını belirli bir kelimeyle filtrelemenin başka bir yolu.

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

Misal:

SHOW DATABASES WHERE `Database` LIKE 'foobar%'
foobar_animal
foobar_humans_gender
foobar_objects
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.