Bei der Verwendung von PHP -PDO (PHP -Datenobjekte) zum Betrieb einer Datenbank gibt es viele Möglichkeiten, Abfrageergebnisse zu erhalten. Pdostatement :: fetchObject () und pdostatement :: fetch () (zusammen mit pdo :: fetch_num, um einen "Fetchrow" -Effekt zu erzielen) sind die beiden häufigsten Arten. Aber viele Entwickler fragen sich oft: Welches sollte ich wählen? Was sind die Unterschiede zwischen ihnen in Bezug auf Leistung, Struktur und Komfort des Gebrauchs? In diesem Artikel werden Sie ein detailliertes Verständnis für ihre Ähnlichkeiten und Unterschiede und anwendbaren Szenarien erlangen.
$pdo = new PDO("mysql:host=localhost;dbname=test", "user", "password");
$stmt = $pdo->query("SELECT id, name, email FROM users");
$user = $stmt->fetchObject();
echo $user->name;
Rückgabewert : Rückgabe eines Objekts, das standardmäßig eine Instanz von STDClass ist und auch in eine benutzerdefinierte Klasse instanziiert werden kann.
Zugriffsmethode : Attributmethode ( $ User-> Name )
Hohe Lesbarkeit , geeignet für den strukturierten Zugriff auf Daten.
Obwohl es keine Fetchrow () -Methode gibt, kann Fetch (pdo :: fetch_num) als seine entsprechende Methode angesehen werden:
$stmt = $pdo->query("SELECT id, name, email FROM users");
$row = $stmt->fetch(PDO::FETCH_NUM);
echo $row[1]; // name
Rückgabewert : Rückgabe des Indexarrays (jede Spalte wird durch numerische Schlüssel angeordnet)
Zugriffsmethode : Indexmethode ( $ row [0] , $ row [1] )
Es ist besser für Fälle geeignet, in denen die Datenstruktur bekannt ist und die Spaltenorder festgelegt ist.
Vergleichselemente | FetchObject () | Fetch (pdo :: fetch_num) |
---|---|---|
Rückgabetyp | Objekt (Standard -STDClass) | Array (Indexarray) |
Attributzugriff | $ obj-> Eigentum | $ row [0] |
Skalierbarkeit | Der Klassenname kann übergeben werden und die Klassenattribute können automatisch gefüllt werden | Kann nicht automatisch dem Unterricht zugeordnet werden |
Leistung | Etwas langsam (erstellen Sie ein Objekt) | Etwas schneller (reines Array) |
Lesbarkeit | Höher | allgemein |
Empfohlene Nutzungsszenarien | ORM, objektorientierte Entwicklung, klare Strukturausgabe | Einfache Berichtsausgabe, Stapelverarbeitung, temporäre Datenverarbeitung |
Die Verwendung von FetchObject () ist sehr geeignet. Es kann die Ergebnisse direkt in Objekte zuordnen, wodurch die nachfolgende Geschäftslogikverarbeitung natürlicher und klarer wird.
class User {
public $id;
public $name;
public $email;
}
$stmt = $pdo->query("SELECT id, name, email FROM users");
$user = $stmt->fetchObject("User");
echo $user->email;
Geeignete Szenarien: Projekt auf Unternehmensebene, DDD-Architektur, Rastful Interface Return Objection
Die Verwendung von Fetch (pdo :: fetch_num) kann die Leistung verbessern, unnötige Objekterstellung vermeiden und eine klare Kontrolle über Feldreihenfolge haben.
while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
echo implode(",", $row) . PHP_EOL;
}
Geeignet für Szenarien: Stapelverarbeitung, Datenexport CSV, schnelles Berichtssystem
Obwohl FetchObject () eine höhere Lesbarkeit liefert, wird bei jedem Datensatz bei der Verarbeitung großer Datenmengen etwas schlechteres als Fetch (pdo :: fetch_num) ausgeführt. Nehmen Sie als Beispiel 100.000 Datenstücke:
fetchObject () : dauert ungefähr 1,5 Sekunden
Fetch (pdo :: fetch_num) : dauert ungefähr 1,1 Sekunden
Die Testumgebung basiert auf lokalen MySQL 8.0 und PHP 8.1, und die Testcode -Adresse lautet: https://gitbox.net/test/pdo_benchmark.php
Wenn Sie API-, ORM- oder Klassenkapselungsschichten erstellen, wird empfohlen, FetchObject () zu verwenden .
Wenn Sie sich mit vorübergehenden, gut strukturierten Berichten oder Stapeldaten befassen, ist es angemessener , Fetch (pdo :: fetch_num) auszuwählen .
Wählen Sie Objekte aus, wenn die Lesbarkeit bevorzugt wird, und wählen Sie Arrays, wenn die Leistung bevorzugt wird.
Szene | Empfohlene Methode |
---|---|
Objektorientierte Verarbeitung | FetchObject () |
Schnell durchqueren und Daten exportieren | Fetch (pdo :: fetch_num) |
Benötigt eindeutige strukturierte Datenkapselung | FetchObject () |
Sehr große Datenmenge, die extreme Leistung verfolgen | Fetch (pdo :: fetch_num) |
Kurz gesagt, beide haben ihre eigenen Stärken, und nur durch die Verwendung von ihnen kann die maximale Wirksamkeit von PDO ausgeübt werden.