MySQL: xác định cơ sở dữ liệu nào được chọn?


242

Sau khi gọi mysql_select_dbđể lấy cơ sở dữ liệu, có cách nào để xuất ra tên của cơ sở dữ liệu hiện đang được chọn không? Điều này có vẻ rất cơ bản nhưng tôi không thể tìm thấy bất cứ điều gì trên php.net hoặc stackoverflow (tất cả các kết quả là "không có cơ sở dữ liệu được chọn").

Câu trả lời:


354

Chỉ cần sử dụng mysql_query (hoặc mysqli_query, thậm chí tốt hơn hoặc sử dụng PDO, tốt nhất) với:

SELECT DATABASE() FROM DUAL;

Phụ lục:

Có nhiều cuộc thảo luận về việc có FROM DUALnên đưa vào điều này hay không. Ở cấp độ kỹ thuật, nó là một sự tiếp quản từ Oracle và có thể được gỡ bỏ một cách an toàn. Nếu bạn có khuynh hướng, bạn có thể sử dụng như sau:

SELECT DATABASE();

Điều đó nói rằng, có lẽ cần lưu ý rằng, trong khi FROM DUALthực tế không làm gì cả, đó là cú pháp MySQL hợp lệ. Từ góc độ nghiêm ngặt, bao gồm cả niềng răng trong một dòng có điều kiện trong JavaScript cũng không làm gì cả , nhưng nó vẫn là một thông lệ hợp lệ.


9
DUAL là một bảng của Oracle, đã được đưa vào MySQL. Đó là một bảng giả cho các hoạt động không yêu cầu một bảng thực tế. vi.wikipedia.org/wiki/DUAL_table
Jan Thomä

11
@DigitalPrecision Đó là một sự nắm giữ từ thực tế là tôi đã làm rất nhiều việc với Oracle. Oracle không cho phép bạn chọn trừ khi nó là từ một thứ gì đó, vì vậy có một bảng đặc biệt gọi là "DUAL" chỉ có một ô trong đó. Bạn có thể bỏ qua nó.
cwallenpoole

1
Có lẽ nên chỉnh sửa điều này để giữ câu trả lời hiện có cho hậu thế nhưng thêm vào đó SELECT DATABASE();là câu trả lời "thực tế".
Người dùng

@ JanThomä có nghĩa là tôi có thể thực hiện bất kỳ truy vấn nào trên bảng DUAL?
Pardeep Jain

1
@PardeepJain nằm ngoài lĩnh vực chuyên môn của tôi, có lẽ cwallenpoole có thể trả lời điều đó.
Jan Thomä

92
SELECT DATABASE();

ps Tôi không muốn tự do sửa đổi câu trả lời của @ cwallenpoole để phản ánh sự thật rằng đây là câu hỏi của MySQL chứ không phải câu hỏi của Oracle và không cần DUAL.


5
Thói quen cũ khó thay đổi. Thỉnh thoảng tôi vẫn nghĩ "TỪ DUAL" mặc dù tôi đã không chạm vào Oracle kể từ năm 2011
cwallenpoole

5
Vâng. Vẫn suy nghĩ TỪ DUAL mặc dù tôi đã không chạm vào Oracle kể từ năm 2011
cwallenpoole

9
Đây là tôi một lần nữa. Vẫn còn suy nghĩ về nó.
cwallenpoole

2
@cwallenpoole bạn vẫn đang nghĩ vậy chứ?
Farhan.K

4
@cwallenpoole làm sao bây giờ?
Nordle

47

Bạn luôn có thể sử dụng lệnh STATUS để tìm hiểu cơ sở dữ liệu hiện tại và người dùng hiện tại

nhập mô tả hình ảnh ở đây


Mặc dù không được phản ánh trong đầu ra ở trên, nhưng trên hệ thống của tôi, nó cũng hiển thị cổng TCP, tiện dụng cho tôi vì tôi đang chạy mysqld_multi và tôi muốn tự nhắc nhở mình đang nói về trường hợp nào.
Jeff

9

Trong các bình luận của http://www.php.net/manual/de/feft.mysql-db-name.php tôi đã tìm thấy cái này từ ericpp% bigfoot.com:

Nếu bạn chỉ cần tên cơ sở dữ liệu hiện tại, bạn có thể sử dụng lệnh SELECT DATABASE () của MySQL:

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

1
Bởi vì OP đã sử dụng hàm PHP "mysql_select_db" và yêu cầu PHP. Bạn đã thực sự đọc câu hỏi?
Jan Thomä 19/03/2015

1
Cảm ơn, vâng, ban đầu tôi đã yêu cầu một câu trả lời dành riêng cho PHP trong trường hợp có một phương thức như thế mysql_current_dbhoặc một cái gì đó. Ai đó đã chỉnh sửa nó để xóa "php" khỏi tiêu đề và thẻ
andrewtweber

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

Nếu không có cơ sở dữ liệu nào được chọn, hoặc không có kết nối, nó sẽ trả về NULLtên của cơ sở dữ liệu đã chọn.


2

hơi lạc đề (sử dụng CLI thay vì PHP), nhưng vẫn đáng để biết: Bạn có thể đặt lời nhắc để hiển thị cơ sở dữ liệu mặc định bằng cách sử dụng bất kỳ thao tác nào sau đây

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

hoặc một khi bên trong

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

1

SELECT DATABASE() đã làm việc trong PHPMyAdmin.


3
Điều này ít nhiều chỉ là sự lặp lại của các câu trả lời hiện có.
Pang

1
có thể là một nhận xét hợp lệ về bất kỳ câu trả lời hợp lệ nào :)
Pardeep Jain

1

Một cách khác để lọc cơ sở dữ liệu với từ cụ thể.

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

Thí dụ:

SHOW DATABASES WHERE `Database` LIKE 'foobar%'
foobar_animal
foobar_humans_gender
foobar_objects
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.