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 เป็นตารางของออราเคิลที่ถูกนำไปใช้กับ MySQL เป็นตารางจำลองสำหรับการดำเนินการที่ไม่ต้องการตารางจริง en.wikipedia.org/wiki/DUAL_table
Jan Thomä

11
@DigitalPrecision มันเป็นสิ่งที่หลงเหลือมาจากความจริงที่ว่าฉันทำงานกับ Oracle เป็นจำนวนมาก Oracle ไม่อนุญาตให้คุณเลือกเว้นแต่จะมาจากบางสิ่งบางอย่างดังนั้นจึงมีตารางพิเศษที่เรียกว่า "DUAL" ซึ่งมีเพียงเซลล์เดียวในนั้น คุณสามารถละเว้นมันได้
cwallenpoole

1
น่าจะเป็นสิ่งที่ควรแก้ไขเพื่อรักษาคำตอบสำหรับคนรุ่นหลัง แต่เพิ่มSELECT DATABASE();เป็นคำตอบ "จริง"
ผู้ใช้

@ JanThomäดังนั้นหมายความว่าฉันสามารถทำการสืบค้นใด ๆ บนตาราง DUAL ได้หรือไม่
Pardeep Jain

1
@PardeepJain ที่อยู่นอกขอบเขตความเชี่ยวชาญของฉันบางที cwallenpoole สามารถตอบได้
Jan Thomä

92
SELECT DATABASE();

PS ผมไม่ได้ต้องการที่จะใช้เสรีภาพในการปรับเปลี่ยน @ คำตอบ cwallenpoole ที่จะสะท้อนให้เห็นถึงความจริงที่ว่านี้เป็นคำถามที่ MySQL และไม่ได้เป็นคำถามที่ Oracle DUALและไม่จำเป็นต้อง


5
นิสัยเก่าตายยาก บางครั้งฉันก็ยังคิดว่า "FROM DUAL" แม้ว่าฉันจะไม่ได้แตะ Oracle ตั้งแต่ปี 2011
cwallenpoole

5
อ๋อ ยังคงคิดจาก DUALแม้ว่าฉันจะไม่ได้สัมผัส Oracle ตั้งแต่ 2011
cwallenpoole

9
นี่คือฉันอีกครั้ง ... ยังคิดอยู่
cwallenpoole

2
@cwallenpoole คุณยังคิดอยู่เหรอ?
Farhan.K

4
@cwallenpoole แล้วตอนนี้ล่ะ?
Nordle

47

คุณสามารถใช้คำสั่ง STATUS เพื่อทำความรู้จักฐานข้อมูลปัจจุบันและผู้ใช้ปัจจุบัน

ป้อนคำอธิบายรูปภาพที่นี่


แม้ว่าจะไม่ปรากฏในผลลัพธ์ข้างต้นบนระบบของฉัน แต่ก็ยังแสดงพอร์ต TCP ซึ่งมีประโยชน์สำหรับฉันเนื่องจากฉันใช้ mysqld_multi และฉันชอบเตือนตัวเองว่าอินสแตนซ์ใดที่ฉันกำลังพูดถึง
Jeff

9

ในความคิดเห็นของhttp://www.php.net/manual/de/function.mysql-db-name.phpฉันพบสิ่งนี้จาก ericpp% bigfoot.com:

หากคุณต้องการชื่อฐานข้อมูลปัจจุบันคุณสามารถใช้คำสั่ง SELECT ฐานข้อมูล () ของ MySQL:

<?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 คุณอ่านคำถามจริงหรือ
Jan Thomä

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 เชน

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.