【问题标题】:How to determine which database is selected如何确定选择了哪个数据库
【发布时间】:2011-12-27 03:33:33
【问题描述】:

在调用mysql_select_db抓取一个数据库后,有什么办法可以稍后输出当前选中的数据库名称吗?这似乎很基本,但我在 php.net 或 stackoverflow 上找不到任何东西(所有结果都是“未选择数据库”)。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    只需使用 mysql_query(或 mysqli_query,甚至更好,或使用 PDO,最好的):

    SELECT DATABASE() FROM DUAL;
    

    附录:

    关于FROM DUAL 是否应包含在此中有很多讨论。在技​​术层面上,它是 Oracle 的保留,可以安全地删除。如果您愿意,可以改用以下内容:

    SELECT DATABASE();
    

    也就是说,需要注意的是,虽然FROM DUAL 实际上并没有任何事情,但它是有效的 MySQL 语法。从严格的角度来看,在 JavaScript 中在单行条件中包含大括号也不会做任何事情,但它仍然是一种有效的做法。

    【讨论】:

    • DUAL 是一个 Oracle 表,已被 MySQL 接管。对于不需要实际表的操作,它是一个虚拟表。 en.wikipedia.org/wiki/DUAL_table
    • @DigitalPrecision 这是因为我在 Oracle 上做了很多工作。 Oracle 不允许您选择,除非它是 from 的东西,因此有一个名为“DUAL”的特殊表,其中只有一个单元格。你可以省略它。
    • 可能应该编辑这个保留现有答案以供后代使用,但添加 SELECT DATABASE(); 作为“实际”答案。
    • @JanThomä 这意味着我可以对 DUAL 表执行任何查询?
    • @PardeepJain 这超出了我的专业领域,也许 cwallenpoole 可以回答。
    【解决方案2】:
    SELECT DATABASE();
    

    附言我不想冒昧修改@cwallenpoole 的答案以反映这是一个 MySQL 问题而不是 Oracle 问题并且不需要 DUAL 的事实。

    【讨论】:

    • 旧习惯难改。尽管自 2011 年以来我没有接触过 Oracle,但我仍然有时会认为“来自 DUAL”。
    • 是的。尽管自 2011 年以来我没有接触过 Oracle,但我仍在思考 FROM DUAL
    • 这又是我……还在想。
    • @cwallenpoole 你还在想吗?
    • @cwallenpoole 现在怎么样?
    【解决方案3】:

    您可以随时使用 STATUS 命令了解当前数据库和当前用户

    【讨论】:

    • 虽然没有反映在上面的输出中,但在我的系统上,它还显示了 TCP 端口,这对我来说很方便,因为我正在运行 mysqld_multi 并且我想提醒自己我在说哪个实例到。
    【解决方案4】:

    http://www.php.net/manual/de/function.mysql-db-name.php的cmets中我从ericpp % bigfoot.com找到了这个:

    如果只需要当前数据库名,可以使用 MySQL 的 SELECT DATABASE() 命令:

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

    【讨论】:

    • 因为 OP 使用了 PHP 函数“mysql_select_db”并要求使用 PHP。你真的读过这个问题吗?
    • 谢谢,是的,我最初要求提供特定于 PHP 的答案,以防万一有类似 mysql_current_db 之类的方法。有人对其进行了编辑以从标题和标签中删除“php”
    【解决方案5】:

    SELECT DATABASE() 在 PHPMyAdmin 工作。

    【讨论】:

    • 这或多或少只是对现有答案的重复。
    • 可以是对任何有效答案的有效评论 :)
    【解决方案6】:

    另一种用特定词过滤数据库的方法。

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

    示例:

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

    【讨论】:

      【解决方案7】:
      @mysql_result(mysql_query("SELECT DATABASE();"),0)
      

      如果没有选择数据库,或者没有连接,则返回NULL,否则返回所选数据库的名称。

      【讨论】:

        【解决方案8】:

        有点离题(使用 CLI 而不是 PHP),但仍然值得了解: 您可以使用以下任何方式设置提示以显示默认数据库

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

        或一次进入

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

        【讨论】:

          猜你喜欢
          • 2012-03-21
          • 1970-01-01
          • 1970-01-01
          • 2013-07-20
          • 1970-01-01
          • 2022-09-23
          • 1970-01-01
          • 1970-01-01
          • 2020-04-10
          相关资源
          最近更新 更多