Проверьте, существует ли база данных и / или таблица - PullRequest
7 голосов
/ 22 февраля 2011

Я пытаюсь написать простой скрипт установки с использованием 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(), который выдает исключение вместо возврата пустого массива.

Поэтому мой вопрос: как мне проверить, существует ли база данных / таблица без исключения или ошибки?

1 Ответ

11 голосов
/ 22 февраля 2011

Грубый пример:

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;
}
...