繁体   English   中英

检查数据库和/或表是否存在

[英]Check if database and/or table exists

我正在尝试使用 Zend Framework 编写一个简单的安装脚本。 它应该运行一些测试:

  • 测试 application.ini 中指定的数据库是否存在(或者是否可以访问它)。
  • 如果是,则测试数据库中是否存在名为user的表
  • 如果是,请检查是否有站点管理员用户

如果任何步骤失败,控制器将负责将用户重定向到安装过程的正确步骤。

我使用以下代码创建了一个模型:

public function verify () {
    $db = $this->getDefaultAdapter(); //throws exception
    if ($db == null) return self::NO_BATABASE;
    $result = $db->describeTable('user'); //throws exception
    if (empty($result)) return self::NO_USER;
    $result = $db->fetchRow('SELECT * FROM user WHERE id = 1');
    if ($result == null) return self::USER_EMPTY;
    else return self::OK;
}

但是,我高估了我使用过的功能。 getDefaultAdapter()可能返回null ,但如果没有要连接的数据库,则会引发异常。 describeTable()也会发生同样的情况,它抛出一个异常而不是返回一个空数组。

因此,我的问题是:如何在不出现异常或错误的情况下检查数据库/表是否存在?

粗略的例子:

public function verify () {
    try{
       $db = $this->getDefaultAdapter(); //throws exception
       if ($db == null) return self::NO_BATABASE;
    }catch(Exception $e){
       return self::NO_BATABASE;
    }
    try{
       $result = $db->describeTable('user'); //throws exception
       if (empty($result)) return self::NO_USER;
    }catch(Exception $e){
       return self::NO_USER;
    }
    $result = $db->fetchRow('SELECT * FROM user WHERE id = 1');
    if ($result == null) return self::USER_EMPTY;
    else return self::OK;
}

describeTable 可以工作,但如果表不存在就会出错,所以我选择了下面的内容,因为如果表存在,它将返回 0 或 1。

 $db = Zend_Db_Table::getDefaultAdapter();
 $sql = 'SELECT count(*) FROM information_schema.TABLES WHERE TABLE_NAME = \'table name\'';
 $result = $db->query($sql)->fetch();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM