In der täglichen Entwicklung begegnen wir häufig auf die Notwendigkeit, die Datenbank zu pagieren und die Ergebnisse als Objekte zurückzugeben. PDO -Erweiterungen von PHP bieten eine sehr bequeme Möglichkeit, dies zu tun, wobei die Pdostatement :: FetchObject -Methode besonders geeignet ist, um Abfrageergebnisse direkt in Objekte zuzuordnen.
Dieser Artikel zeigt anhand von Beispielen, wie die Paging -Abfrage in Kombination mit FetchObject implementiert und Objektdaten korrekt verarbeitet werden.
Stellen Sie zunächst sicher, dass Ihre Umgebung die PDO -Erweiterung aktiviert und die Datenbank verbunden ist. Zum Beispiel:
<?php
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8mb4';
$username = 'dbuser';
$password = 'dbpass';
try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die('Die Datenbankverbindung ist fehlgeschlagen: ' . $e->getMessage());
}
?>
Für Paging müssen wir Limit und Offset einstellen. Angenommen, wir möchten die Daten einer Benutzertabelle abfragen, und 5 Datensätze werden pro Seite angezeigt.
<?php
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$page = max($page, 1); // Das kleinste ist das1Seite
$pageSize = 5;
$offset = ($page - 1) * $pageSize;
$sql = 'SELECT id, username, email FROM users ORDER BY id ASC LIMIT :limit OFFSET :offset';
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':limit', $pageSize, PDO::PARAM_INT);
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->execute();
?>
Als nächstes kartieren wir das Ergebnis in eine Objektzeile durch Zeile durch die FetchObject -Methode. Sie können eine Klasse oder die integrierte STD-Klasse von PHP direkt anpassen.
Beispiele verwenden STDClass :
<?php
$users = [];
while ($user = $stmt->fetchObject()) {
$users[] = $user;
}
// Drucken Sie eine Reihe von Objekten
foreach ($users as $user) {
echo 'ID: ' . $user->id . '<br>';
echo 'Benutzername: ' . htmlspecialchars($user->username, ENT_QUOTES, 'UTF-8') . '<br>';
echo 'Post: ' . htmlspecialchars($user->email, ENT_QUOTES, 'UTF-8') . '<br><br>';
}
?>
Wenn Sie eine benutzerdefinierte Benutzerklasse verwenden möchten, können Sie sie so definieren und übergeben:
<?php
class User
{
public $id;
public $username;
public $email;
public function getProfileUrl()
{
return 'https://gitbox.net/user/profile.php?id=' . urlencode($this->id);
}
}
$users = [];
while ($user = $stmt->fetchObject(User::class)) {
$users[] = $user;
}
// Drucken Sie eine Reihe von Objekten
foreach ($users as $user) {
echo 'ID: ' . $user->id . '<br>';
echo 'Benutzername: ' . htmlspecialchars($user->username, ENT_QUOTES, 'UTF-8') . '<br>';
echo 'Post: ' . htmlspecialchars($user->email, ENT_QUOTES, 'UTF-8') . '<br>';
echo 'Profil -Link: <a href="' . htmlspecialchars($user->getProfileUrl(), ENT_QUOTES, 'UTF-8') . '">Überprüfen</a><br><br>';
}
?>
Beachten Sie, dass die FetchObject -Methode die von Ihnen angegebene Klasse direkt instanziieren kann, und den Attributen automatisch Werte zuweisen, die für Methoden, die ein Kapselungsverhalten erfordern, sehr geeignet sind, z. B. das GetProfileurl oben.
Mithilfe von PDOSTATEMENT :: FetchObject kann Datenbankdatensätze sehr elegant zu Objekten zugeordnet werden, insbesondere für die Entwicklung von Objektorientierter Anwendungsentwicklung. Wenn Sie sich mit Paging -Abfrage kombinieren, müssen Sie der SQL -Anweisung nur eine Grenze hinzufügen und ausgleichen und dann FetchObject verwenden, um sie einzeln zu erhalten.
Wenn Sie ein MVC -Framework- oder Backend -Management -System erstellen, macht diese Methode Ihren Code prägnanter und wartbarer.