Zend_Db без Zend Framework

Я хочу использовать Zend_Db без Zend_Framework. Я хочу включить Zend_Db для моего существующего сайта, который не был создан с использованием Zend Framework. Можно ли использовать Zend_Db таким образом? Можете ли вы порекомендовать хороший учебник или пример, как сделать это хорошо?

3 ответа

Решение

В некоторой степени это зависит от веб-платформы, которую вы используете. Но, в целом, документация Zend_Db довольно ясна в этом отношении.

Создайте экземпляр адаптера в вашей начальной загрузке. В качестве примера:

$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'     => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxxxx',
    'dbname'   => 'test'
));

Если вы планируете использовать Zend_Db_Table, то вы можете сделать это адаптером по умолчанию:

Zend_Db_Table::setDefaultAdapter($db);

В любом случае полезно сохранить этот адаптер там, где вы можете получить к нему доступ. Например:

Zend_Registry::set('db', $db);

Затем в своем последующем коде используйте этот адаптер для создания запросов для select(), insert(), update(), delete(), так далее:

$db = Zend_Registry::get('db');
$select = $db->select()
    ->from('posts')
    ->where('cat_id = ?', $catId)
    ->order('date_posted DESC')
    ->limit(5);
$rows = $db->fetchAll($select);

Надеюсь это поможет. Ура!

Для Zend Framework 2.* создание адаптера будет:

$db = new \Zend\Db\Adapter\Adapter([
    'driver' => 'Pdo_Mysql',
    'host' => '127.0.0.1',
    'username' => 'webuser',
    'password' => 'xxxxxx',
    'database' => 'test',
]);

Для создания выберите:

$sql = new \Zend\Db\Sql\Sql($db);
$select = $sql->select()
    ->from('posts')
    ->where(array('cat_id' => $catId))
    ->order('date_posted DESC')
    ->limit(5);
$statement = $sql->prepareStatementForSqlObject($select);
$results = $statement->execute();

Или, если вы хотите получить чистый SQL из $select:

$selectSql = $sql->getSqlStringForSqlObject($select);

Документы могут быть полезны. Это может быть еще проще, если используется TableGateway.

Использование Zend_Db было бы даже предпочтительнее (IMHO) по сравнению с использованием Raw PDO. Просто создайте объект $db, а затем создайте операторы SQL, используя класс Zend_Db_Select, и передайте оператор SQL $select в методы fetch* (fetchRow, fetchAll...).

Другие вопросы по тегам