2009-06-09 24 views
1

Ich verwende derzeit die Zend_Db-Klasse, um meine Datenbankverbindungen zu verwalten. Ich hatte ein paar Fragen dazu.korrekte Verwendung von Zend_Db

  • Führt es das Öffnen von Verbindungen intelligent? (zB habe ich eine Verbindung schon geöffnet, weiß sie davon Gebrauch zu machen - oder muss ich ständig prüfen, ob es schon eine offene Verbindung gibt, bevor ich eine neue öffne?)
  • Ich benutze den folgenden Code um holen Ergebnisse (in FETCH_OBJ Modus holen):

    $final = $result->fetchAll(); 

    return $final[0]->first_name; 

aus irgendeinem Grund fetchRow funktioniert nicht - so ständig ich fetchAll verwenden, auch wenn ich nur ein Ergebnis haben werden (wie die Suche WHERE id= number und id a PK)

Meine Frage ist - wie viel mehr Zeit/Gedächtnis ich opfere, wenn ich fetchAll benutze und nicht fetchRow, auch wenn es nur res gibt Ult?

  • Ich habe die folgende Klasse geschaffen, um meine Verbindungen zu verwalten:

    require 'Zend/Db.php'; 

    class dbconnect extends Zend_Db 

{ 



function init() 
    { 
     $params = array (...... 

     return Zend_Db::factory ('PDO_MYSQL', $params); 
    } 

} 

und dann rufe ich


$handle = dbconnect::init 

$handle->select().... 

ist dies der beste Weg? Hat jemand eine bessere Idee?

Danke!

p.s. Es tut mir leid, dass die Codeformatierung schlampig hier herauskam.

Antwort

3

Viele Fragen!

Führt es die öffnenden Verbindungen smartly?

Ja, wenn Sie Ihre erste Abfrage ausführen, wird eine Verbindung erstellt und nachfolgende Abfragen verwenden die gleiche Verbindung. Dies gilt, wenn Sie wiederverwenden den gleichen Zend_Db-Adapter. Ich es in der Regel auf meine gesamte Anwendung mit Zend_Registry zur Verfügung stellen:

$db = Zend_Db::factory(...) // create Db instance 
Zend_Registry::set('db', $db); 

//in another class or file somewhere 
$db = Zend_Registry::get('db'); 
$db->query(...)//run a query 

Der obige Code geht in der Regel in Ihrer Anwendung Bootstrap. Ich würde nicht die Mühe haben, die Zend_Db-Klasse zu erweitern, nur um sie zu initialisieren.

Bezüglich fetchRow - Ich glaube, die Hauptunterschied besteht darin, dass die Abfrage ausführen, um 1 Zeile beschränkt ist, und das Objekt zurückgekehrt ist ein Zend_Db_Table_Row eher als ein Zend_Db_Table_Rowset (wie ein Array von Reihen), und führt nicht wesentlich langsamer.

fetchRow sollte in Ordnung sein, also poste etwas Code, der nicht funktioniert, da es wahrscheinlich irgendwo einen Fehler gibt.

0

neben dcaunt Antwort: FetchAll liefert Array OR Zend_Db_Talbe_Rowset - je nachdem, ob Sie ausführen $zendDbTableModel->fetchAll() oder $dbAdapter->fetchAll() Das Gleiche gilt für fetchRow() geht.Wenn Sie fetchRow nicht für Modelle verwenden können, ist es einfacher, $model->getAdapter()->fetchRow($sqlString);

zu verwenden
Verwandte Themen