Как Zend DB управляет подключениями к базе данных

Я использую Zend Framework для своих PHP-разработок, и вот небольшая функция, которую я использовал для выполнения запроса. Речь идет не об ошибке. Код и все работает отлично. Но я хочу знать некоторые концепции этого.

/** * Get dataset by executing sql statement * * @param string $sql - SQL Statement to be executed * * @return bool */ public function executeQuery($sql) { $this->sqlStatement = $sql; if ($this->isDebug) { echo $sql; exit; } $objSQL = $this->objDB->getAdapter()->prepare($sql); try { return $objSQL->execute(); } catch(Exception $error) { $this->logMessage($error->getMessage() . " SQL : " .$sql); return false; } return false; } 

Пыль – неясные области для меня.

  1. Как Zend_Db_Table_Abstract Поддерживать подключения к базе данных?
  2. Является ли это создание нового соединения все время, когда я вызываю эту функцию или у нее есть пул соединений?
  3. Я не писал никакой кодировки для открытия или закрытия соединения с базой данных. Так будет ли zend framework автоматически закрывать соединения?
  4. Если это открытое и закрытое соединение работает все время, если я выполняю эту функцию, есть ли проблема с производительностью?

Благодарю вас и оцените ваши предложения и мнения по этому поводу.

Создание соединения

Создание экземпляра класса адаптера не сразу подключается к серверу РСУБД . Адаптер сохраняет параметры подключения и делает фактическое соединение по требованию, в первый раз, когда вам нужно выполнить запрос. Это гарантирует, что создание объекта адаптера будет быстрым и недорогим. Вы можете создать экземпляр адаптера, даже если вы не уверены, что вам нужно запускать любые запросы к базе данных во время текущего запроса, которое подает ваше приложение.

Если вам нужно заставить адаптер подключиться к РСУБД, используйте метод getConnection (). Этот метод возвращает объект для соединения, представленный соответствующим расширением базы данных PHP. Например, если вы используете какой-либо из классов адаптера для PDO-драйверов, getConnection () возвращает объект PDO после его запуска в качестве прямого подключения к конкретной базе данных.

Может оказаться полезным принудительное соединение, если вы хотите поймать все исключения, которые он выбрасывает в результате недопустимых учетных данных учетной записи, или другой отказ подключиться к серверу РСУБД. Эти исключения не выдаются до тех пор, пока соединение не будет создано, поэтому оно может помочь упростить код приложения, если вы обрабатываете исключения в одном месте, а не во время первого запроса к базе данных.

Кроме того, адаптер может быть сериализован для хранения, например, в переменной сеанса. Это может быть очень полезно не только для самого адаптера, но и для других объектов, которые его объединяют, например объект Zend_Db_Select. По умолчанию адаптеры могут быть сериализованы, если вы этого не хотите, вам следует рассмотреть возможность передачи опции Zend_Db :: ALLOW_SERIALIZATION с FALSE, см. Пример выше. Чтобы соблюдать принцип ленивых соединений, адаптер не будет повторно подключаться после того, как будет неэтериализован. Затем вы должны вызвать getConnection (). Вы можете сделать автоматическое повторное подключение адаптера, передав Zend_Db :: AUTO_RECONNECT_ON_UNSERIALIZE с TRUE в качестве опции адаптера.

Закрытие соединения

Обычно нет необходимости закрывать соединение с базой данных. PHP автоматически очищает все ресурсы и конец запроса. Расширения базы данных предназначены для закрытия соединения по мере очистки ссылки на объект ресурса.

Однако, если у вас многострочный PHP-скрипт, который инициирует многие подключения к базе данных, вам может потребоваться закрыть соединение, чтобы избежать исчерпания возможностей вашего сервера РСУБД. Вы можете использовать метод closeConnection () адаптера, чтобы явно закрыть базовое соединение с базой данных.

Начиная с версии 1.7.2 вы можете проверить, что в настоящее время вы подключены к серверу РСУБД с помощью метода isConnected (). Это означает, что ресурс соединения был инициирован и не был закрыт. Эта функция в настоящее время не может протестировать, например, закрытие соединения на стороне сервера. Это внутреннее использование, чтобы закрыть соединение. Это позволяет вам закрыть соединение несколько раз без ошибок. Это было уже до 1.7.2 для адаптеров PDO, но не для других.

Больше информации