phpbar.de logo

Mailinglisten-Archive

[php] schnellster Datenbank-Layer

[php] schnellster Datenbank-Layer

Yannik Hampe yannik at cipher-code.de
Mit Mar 28 16:16:03 CEST 2007



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