phpbar.de logo

Mailinglisten-Archive

[php] schnellster Datenbank-Layer

[php] schnellster Datenbank-Layer

Martin Spuetz mas at spuetz.ath.cx
Mit Mar 28 17:56:29 CEST 2007


Yannik Hampe wrote:
>> $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!

blödes Beispiel stell dir id > ? vor, aber auch egal.

foreach ($query as $row) ist natürlich der beste Weg. War hier
gedanklich in einem Projekt und da geht das so nicht.

>> fetchAll() dürfte langsamer sein, ich würde hier auch also auch auf
>> while ($query->fetch() setzen.
> 
> NFC!

Ähmm, ist zwar jetzt überlüssig, aber ich meinte sowas:

$all = $query->fetchAll(PDO::FETCH_ASSOC);
foreach ($all as $row) {
    $d = new dataset();
    $d->foo = $row["bar"];
}


oder

while ($field = $query->fetch(PDO::FETCH_ASSOC)) {
    $d =new dataset();
    $d->foo = $field["bar"];
}

Martin

php::bar PHP Wiki   -   Listenarchive