Mailinglisten-Archive |
Martin Spuetz wrote: > Marian Steinbach wrote: >> Ich habe erst vor ein paar Tagen einen einfachen Vergleich zwischen >> den mysql_*-Funktionen, MDB2 und PDO (unter PHP 5.2.1) gemacht und >> überrascht festgestellt, dass die mysql_* Funktionen die langsamste >> Variante von den dreien war. Am schnellsten war PDO, insbesondere >> durch funktionsloses Iterieren durch Ergebnis. (Sprich: anstelle von >> while ($row = mysql_fetch_row()) nimmt man in PDO "foreach". Wer dazu >> noch das gesamte Abfrageergebnis in einem einzigen Aufruf in ein >> PHP-Array zieht, ist noch schneller.). > > Ich würde foreach nicht unbedingt benutzen: > > $sql = "SELECT * FROM table WHERE id = ?"; > $query = $pdo->prepare($sql); > $query->execute(array($id)); > > foreach ($query->fetch(PDO::FETCH_ASSOC) as $row) { > > Wenn du jetzt keinen passende Tupel in der DB hast, liefert fetch() > false zurück, damit kann forech nix anfangen und wirft einen PHP Fehler. Du machst das ja auch falsch... Richtig: $sql = "SELECT * FROM table WHERE id = ?"; $query = $pdo->prepare($sql); $query->execute(array($id)); foreach ($query as $row) { ... (->fetch weg! sonst iterierst du sowioeso nicht über die Datensätze sondern nur die Felder des einen! > > fetchAll() dürfte langsamer sein, ich würde hier auch also auch auf > while ($query->fetch() setzen. NFC! > > Gruss, > Martin Yannik
php::bar PHP Wiki - Listenarchive