MySQL: determinar qué base de datos está seleccionada?

242

Después de llamar mysql_select_dbpara tomar una base de datos, ¿hay alguna forma de generar el nombre de la base de datos que está seleccionada actualmente? Esto parece muy básico, pero no pude encontrar nada en php.net o stackoverflow (todos los resultados son para "ninguna base de datos seleccionada").

andrewtweber
fuente

Respuestas:

354

Simplemente use mysql_query (o mysqli_query, incluso mejor, o use PDO, lo mejor de todo) con:

SELECT DATABASE() FROM DUAL;

Apéndice:

Hay mucha discusión sobre si se FROM DUALdebe incluir o no en esto o no. A nivel técnico, es un remanente de Oracle y se puede eliminar de forma segura. Si está inclinado, puede usar lo siguiente en su lugar:

SELECT DATABASE();

Dicho esto, quizás sea importante tener en cuenta que, si FROM DUALbien en realidad no hace nada, es una sintaxis válida de MySQL. Desde una perspectiva estricta, incluir llaves en una sola línea condicional en JavaScript tampoco hace nada , pero sigue siendo una práctica válida.

cwallenpoole
fuente
99
DUAL es una tabla de Oracle, que fue incorporada a MySQL. Es una tabla ficticia para operaciones que no requieren una tabla real. en.wikipedia.org/wiki/DUAL_table
Jan Thomä
11
@DigitalPrecision Es un remanente del hecho de que he trabajado mucho con Oracle. Oracle no le permite seleccionar a menos que sea de algo, por lo que hay una tabla especial llamada "DUAL" que tiene solo una celda. Puedes omitirlo.
cwallenpoole
1
Probablemente debería editar esto manteniendo la respuesta existente para la posteridad pero agregando SELECT DATABASE();como la respuesta "real".
Usuario
@ JanThomä, ¿eso significa que puedo realizar cualquier consulta en la tabla DUAL?
Pardeep Jain
1
@PardeepJain que está fuera de mi área de especialización, tal vez cwallenpoole pueda responder eso.
Jan Thomä
92
SELECT DATABASE();

ps No quería tomarme la libertad de modificar la respuesta de @ cwallenpoole para reflejar el hecho de que esta es una pregunta de MySQL y no una pregunta de Oracle y no es necesaria DUAL.

Elijah Lynn
fuente
55
Los viejos hábitos tardan en morir. Yo todavía veces pienso "FROM DUAL" a pesar de que no he tocado Oracle desde 2011.
cwallenpoole
55
Sí. Todavía pienso EN DUAL aunque no he tocado Oracle desde 2011.
cwallenpoole
99
Este soy yo otra vez ... Todavía lo pienso.
cwallenpoole
2
@cwallenpoole, ¿todavía lo estás pensando?
Farhan.K
44
@cwallenpoole ¿qué tal ahora?
Nordle
47

Siempre puede usar el comando ESTADO para conocer la base de datos actual y el usuario actual

ingrese la descripción de la imagen aquí

Mogli
fuente
aunque no se refleja en el resultado anterior, en mi sistema, también muestra el puerto TCP, lo cual es útil para mí ya que estoy ejecutando mysqld_multi y me gusta recordarme a qué instancia estoy hablando.
Jeff
9

En los comentarios de http://www.php.net/manual/de/function.mysql-db-name.php encontré este de ericpp% bigfoot.com:

Si solo necesita el nombre de la base de datos actual, puede usar el comando SELECT DATABASE () de MySQL:

<?php
function mysql_current_db() {
    $r = mysql_query("SELECT DATABASE()") or die(mysql_error());
    return mysql_result($r,0);
}
?>
Jan Thomä
fuente
1
Porque el OP usó una función PHP "mysql_select_db" y pregunta por PHP. ¿Realmente leíste la pregunta?
Jan Thomä
1
Gracias, sí, originalmente había pedido una respuesta específica de PHP en caso de que hubiera un método como mysql_current_dbo algo así. Alguien lo editó para eliminar "php" del título y las etiquetas
andrewtweber
3
@mysql_result(mysql_query("SELECT DATABASE();"),0)

Si no hay una base de datos seleccionada, o no hay conexión, devuelve NULLel nombre de la base de datos seleccionada.


fuente
2

ligeramente fuera de tema (usando la CLI en lugar de PHP), pero aún vale la pena saberlo: puede configurar el indicador para que muestre la base de datos predeterminada utilizando cualquiera de los siguientes

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

o una vez dentro

prompt \d>\_
\R \d>\_
Jeff
fuente
1

SELECT DATABASE() trabajó en PHPMyAdmin.

Abhi Chavda
fuente
3
Esto es más o menos solo una repetición de las respuestas existentes.
Pang
1
puede ser un comentario válido sobre cualquier respuesta válida :)
Pardeep Jain
1

Otra forma de filtrar la base de datos con una palabra específica.

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

Ejemplo:

SHOW DATABASES WHERE `Database` LIKE 'foobar%'
foobar_animal
foobar_humans_gender
foobar_objects
Diestro
fuente