Aktueller Standort: Startseite> Neueste Artikel> So behandeln Sie das DateTime -Format in Pdostatement :: FetchObject

So behandeln Sie das DateTime -Format in Pdostatement :: FetchObject

gitbox 2025-05-12

Bei der Verwendung von PHP -PDO zum Betrieb der Datenbank ist die PDOSTATEMENT :: FetchObject () -Methode sehr bequem und kann die Abfrage -Ergebnisse direkt zu einem Objekt zuordnen. Wenn das Datenbankfeld jedoch (z. B. Zeitstempeltypen ) enthält, kann es einige Probleme mit FetchObject aufnehmen, z.

In diesem Artikel wird erläutert, wie diese DateTime -Felder bei Verwendung von FetchObject korrekt behandelt werden und praktische Beispiele angeben.

Problemhintergrund

Angenommen, es gibt einen Benutzer -Tabellenbenutzer , die Struktur lautet wie folgt:

 CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    created_at DATETIME NOT NULL
);

Daten einfügen:

 INSERT INTO users (name, created_at) VALUES ('Alice', '2025-04-27 14:30:00');

Verwenden Sie FetchObject , um Daten zu erhalten:

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->query('SELECT * FROM users WHERE id = 1');
$user = $stmt->fetchObject();

echo $user->created_at;
?>

Die Ausgabe ist eine normale Zeichenfolge :

 2025-04-27 14:30:00

Wenn Sie auf created_at hinzufügen, subtrahieren, formatieren möchten, müssen Sie es manuell mit der DateTime -Klasse konvertieren, die sehr unelegant ist.

Methoden zum korrekten Umgang mit Datums- und Zeitfeldern

Es gibt zwei allgemeine Möglichkeiten, es anmutig damit umzugehen:

Methode 1: Felder manuell konvertieren

Konvertieren Sie nach dem Erhalten des Objekts das Datumsfeld sofort in das DateTime -Objekt.

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->query('SELECT * FROM users WHERE id = 1');
$user = $stmt->fetchObject();

if ($user && isset($user->created_at)) {
    $user->created_at = new DateTime($user->created_at);
}

// Jetzt kann es direkt verwendet werden DateTime Verfahren
echo $user->created_at->format('YJahrmMonddTag H:i:s');
?>

Obwohl diese Methode einfach ist, muss sie jedes Mal manuell konvertiert werden . Wenn die Tabellenstruktur komplex ist oder es viele Felder gibt, steigen die Wartungskosten.

Methode 2: Verwenden Sie eine benutzerdefinierte Entitätsklasse (empfohlen)

Erstellen Sie eine Entitätsklasse, definieren Sie den entsprechenden Attributtyp und verarbeiten Sie das Datum und die Uhrzeit automatisch im Konstruktor.

 <?php
class User
{
    public int $id;
    public string $name;
    public DateTime $created_at;

    public function __construct()
    {
        // Müssen die ursprüngliche Zeichenfolge hinzufügen created_at Konvertieren zu DateTime Objekt
        if (is_string($this->created_at)) {
            $this->created_at = new DateTime($this->created_at);
        }
    }
}
?>

Geben Sie den Klassennamen an, wenn Sie FetchObject verwenden:

 <?php
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->query('SELECT * FROM users WHERE id = 1');
$user = $stmt->fetchObject(User::class);

echo $user->created_at->format('Y-m-d H:i:s');
?>

Die Vorteile davon sind:

  • Der Code ist klarer

  • Vermeiden Sie die fehlende Feldverarbeitung

  • Die Objektstruktur ist standardisierter und erleichtert die IDE die automatische Abschluss

  • Geeignet für größere Projekte oder langfristige Wartung

Dinge zu beachten

Wenn Ihre PHP -Version es unterstützt, können Sie Deklarationen des Eigenschaftstyps , wie z. B. in PHP 8.0 eingeführte Konstruktor -Eigenschaftsförderung, kombinieren, um das Schreiben von Entitätsklassen weiter zu vereinfachen.

Stellen Sie gleichzeitig sicher, dass das von der Datenbank zurückgegebene Feldformat immer dem ISO-Standard ( YYYY-MM-DD HH: MM: SS ) entspricht, um die Date- Analyse-Fehlerversagen zu vermeiden.

Zusammenfassung

Bei Verwendung von pdostatement :: fetchObject () ist das direkt zurückgegebene Datum und die Uhrzeit eine Zeichenfolge. Wenn Sie eine elegante Behandlung benötigen, wird empfohlen:

  • Kleine Gegenstände können nach dem Entfernen manuell in DateTime konvertiert werden

  • In großen Projekten oder standardisierten Entwicklung wird dringend empfohlen, kundenspezifische Entitätsklassen zu verwenden.

Durch rationale Entwurfsklassen können die Robustheit und Wartbarkeit des Codes erheblich verbessert werden.

Wenn Sie mehr über PDO -Nutzungstipps erfahren möchten, können Sie sich auf die offizielle Dokumentation beziehen.