2011-01-30 15 views
6

Voglio utilizzare Zend_Db senza Zend_Framework. Voglio incorporare Zend_Db per il mio sito Web esistente che non è stato creato utilizzando Zend Framework. È possibile usare Zend_Db in questo modo? Puoi consigliarti un buon tutorial o un esempio su come farlo bene?Zend_Db senza Zend Framework

risposta

10

In una certa misura, ciò dipende dal framework Web che si sta utilizzando. Ma, in generale, lo Zend_Db documentation è abbastanza chiaro a questo riguardo.

Creare un'istanza di adattatore nel bootstrap. Per fare un esempio:

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

Se si prevede di utilizzare Zend_Db_Table, allora si può fare questo l'adattatore di default:

Zend_Db_Table::setDefaultAdapter($db); 

In ogni caso, è utile avere questo adattatore da qualche parte salvato dove è possibile accedere esso. Per esempio:

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

Poi nel codice a valle, utilizzare questo adattatore per creare query per select(), insert(), update(), delete(), ecc:

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

Spero che questo aiuti. Saluti!

+0

Buona risposta completa ... –

+0

Grazie. Ci proverò. – user594791

0

L'utilizzo di Zend_Db sarebbe addirittura preferibile (IMHO) rispetto all'utilizzo di PDO Raw. Basta creare un oggetto $ db e quindi creare istruzioni SQL usando la classe Zend_Db_Select e passare l'istruzione $ select $ ai metodi fetch * (fetchRow, fetchAll ...).

1

Per Zend Framework 2. *, creando l'adattatore sarebbe:

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

Per creare selezionare:

$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(); 

O, se si vuole ottenere SQL puro dal $ selezionare:

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

Docs potrebbe essere utile. Può essere ancora più semplice se si utilizza TableGateway.