2009-12-10 14 views
5

Ich habe nach einer Antwort gesucht, aber habe es nirgendwo gefunden. Sind Anrufe PDO ::() gecached vorbereiten, oder sollte ich das Ergebnis selbst cachen, dh wenn ich die folgendePHP PDO Caching

function foo() { 
    $handle = PDO::prepare(...); 
    /* do stuff with the handle */ 
} 

Sie wird die prepare() Erklärung von PDO im Cache gespeichert werden, so dass sie die zweite schnell ist abgerufen, 3. usw. mal? Oder ist es besser, es selbst zu tun, z.B.

function foo() { 
    static $handle = null; 
    if (!$handle) { 
    $handle = PDO::prepare(...); 
    } 
    /* do stuff with the handle */ 
} 

Antwort

4

Es gibt die MySQL query cache. Im Allgemeinen sollten Sie jedoch den Bezeichner für die vorbereitete Anweisung behalten und erneut verwenden.

4

Zwei aufeinanderfolgende Aufrufe an PDO::prepare() (auch mit der gleichen SQL-Abfrage) sollten zwei verschiedene PDOStatement (oder Handles) zurückgeben, um Kollisionen zu vermeiden, insbesondere zwischen vorherigen und aktuellen Bindungen, die Sie anwenden können. Die Kosten für die Erstellung eines PDOStatements mit prepare() sind ohnehin niedrig. Was zwischengespeichert werden kann, sind die Ergebnisse, die von derselben SQL-Abfrage zurückgegeben werden, entweder unformatiert oder von prepare() erstellt, und dies ist eine Funktion Ihres DBMS (z. B. MySQL), nicht PHP.

1

Es hängt von Ihrem Datenbanktreiber ab. Mit MySQL erstellt PDO standardmäßig eine native Prepared-Anweisung. Sie können es deaktivieren, wenn Sie einen tatsächlichen Abfragecache verwenden möchten.

Wenn Sie unbedingt die gleiche Abfrage wiederholt ausführen müssen, dann ja, Sie wollen diese Handle zu halten. Wenn Sie emulierte vorbereitete Anweisungen verwenden, macht das überhaupt keinen Unterschied.