检查数据库和/或表是否存在
我正在尝试使用 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()
也会发生同样的情况,它抛出异常而不是返回空数组。
因此,我的问题是:如何检查数据库/表是否存在而不出现异常或错误?
I am trying to write a simple installation script using Zend Framework. It's supposed to run a few tests:
- test if the database specified in application.ini exists (or if there's access to it).
- if it does, test if a table called
user
exists within the database - if it does, check if there's a site admin user
Should any of the steps fail, the controller will take care of redirecting the user to the proper step of the installation process.
I created a model with the following code:
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;
}
However, I overestimated the functions I have used. getDefaultAdapter()
may return null
, but in case there's no database to connect to, an exception is thrown. Same happens with describeTable()
, which throws an exception instead of returning an empty array.
My question is therefore: how do I check whether the database/table exists without getting an exception or error?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
粗略的例子:
Rough example :
describeTable 可以工作,但如果表不存在,就会出错,所以我选择了下面的方法,因为如果表存在,它将返回 0 或 1。
describeTable will work but will error if the table does not exists, so I went for the below as it will will return 0 or 1 if the table exists.