In PHP verwenden wir häufig Fetch_Object , um Daten in Form von Objekten aus Datenbankabfragen zu erhalten. Fetch_Object gibt normalerweise ein Objekt zurück, kein assoziatives Array. Manchmal stellen wir jedoch fest, dass der Eigenschaftswert des zurückgegebenen Objekts falsch oder der erwartete Wert nicht erhalten werden kann. Was könnte also die Ursache für dieses Problem sein? Sprechen wir noch heute über häufige Probleme und Lösungen.
Der häufigste Grund ist, dass die in SQL -Abfragen zurückgegebenen Feldnamen nicht mit den Attributnamen des Objekts übereinstimmen. Fetch_Object nimmt den Feldnamenabfrage in der Datenbank als Eigenschaftsnamen des Objekts ein. Wenn der Feldname nicht mit dem Eigenschaftsnamen des Objekts übereinstimmt oder der Feldname einen Unterstrich enthält und der Eigenschaftsname keinen Unterstrich hat (oder umgekehrt), kann es einen Wertfehler verursachen.
Stellen Sie sicher, dass der von der SQL -Abfrage zurückgegebene Feldname mit dem Attributnamen des Objekts übereinstimmt.
Wenn der Feldname einen Unterstrich verwendet (z. B. user_name ), können Sie den Feldnamen in einen geeigneteren Attributnamen konvertieren, indem Sie ein als Schlüsselwort für das Abfrageergebnis verwenden, z. B.:
$sql = "SELECT user_name AS userName FROM users";
Auf diese Weise hat das von Fetch_Object zurückgegebene Objekt das Benutzername -Attribut.
Wenn Sie Alias für Tabellenfelder in SQL -Abfragen verwenden und der Name des Objektattributs in PHP nicht übereinstimmt, tritt ein Problem auf. Wenn beispielsweise in der Abfrage ausgewählte Name als Benutzername vorliegt, sollte das Attribut im Abfrageergebnis Benutzername sein, nicht Name .
Stellen Sie bei der Verwendung von Alias sicher, dass der Name des Eigenschaftszugriffs in Ihrem PHP -Code mit dem Alias in Ihrer SQL -Abfrage übereinstimmt.
Manchmal stellen wir möglicherweise fest, dass einige Felder leere Werte haben oder nicht verfügbar sind. Dies liegt normalerweise daran, dass SQL -Abfragen diese Felder nicht korrekt zurückgeben. Wenn beispielsweise die Abfragebedingungen nicht übereinstimmen oder wenn Join verwendet wird, werden einige Felder übersehen, was auch zu falschen Werten führen kann.
Stellen Sie in der SQL -Abfrage sicher, dass alle erforderlichen Felder zurückgegeben werden.
Verwenden Sie das linke Join oder die rechte Verbindung, um den Verlust der erforderlichen Datensätze zu vermeiden.
Wenn der Werttyp eines Feldes in der Datenbank nicht mit dem erwarteten Typ übereinstimmt, kann sich der von Fetch_Object erhaltene Datentyp auch von dem unterscheiden, was wir wollen. Beispielsweise kann ein numerisches Feldtypfeld in einer Datenbank in einen String -Typ konvertiert werden, oder ein Datumstypfeld wird fälschlicherweise als Zeichenfolge verarbeitet.
Verwenden Sie die Typ -Konvertierung oder gießen Sie den Feldwert in den erwarteten Typ.
$user = $stmt->fetch_object();
$age = (int) $user->age; // Ganzzahl gegossen
Wenn Sie PDO verwenden, um die Abfrage auszuführen und PDO :: fetch_obj nicht richtig einzustellen, gibt die Fetch_Object -Methode möglicherweise nicht das Objekt zurück, sondern das assoziative Array zurück. Um sicherzustellen, dass das Objekt zurückgegeben wird, müssen Sie sicherstellen, dass die PDO -Abfrage mit PDO :: fetch_obj als Parameter ausgeführt wird.
Stellen Sie bei der Ausführung einer Abfrage sicher, dass Sie den Fetch -Modus korrekt einstellen:
$stmt = $pdo->query("SELECT * FROM users");
$user = $stmt->fetch(PDO::FETCH_OBJ);
Manchmal müssen einige URLs während der Datenbankabfrage gespleißt werden, oder es müssen Felder externer Ressourcen erhalten werden. Wenn die URL beim Spleißen der URL nicht korrekt verarbeitet wird, insbesondere wenn Domainnamen beteiligt sind, kann sie dazu führen, dass die erhaltene URL falsch ist, was wiederum den Eigenschaftswert des Objekts beeinflusst.
Zum Beispiel kann die Verwendung des falschen Domänennamens beim Spleißen der URL versehentlich die Verwendung des Protokolls (http: // oder https: //) verwendet, um den endgültigen Attributwert nicht wie erwartet zu sein.
Verwenden Sie einen einheitlichen Domainnamen für URL -Spleißen. Wenn der Domain -Name in der URL beteiligt ist, stellen Sie sicher, dass der Domänenname teilweise konsistent ist, wie z. B. M66.net .
Verwenden Sie beim Spleißen von URLs den vollständigen URL -Pfad, um Fehler zu vermeiden, die durch relative Pfade verursacht werden.
$url = "http://m66.net/path/to/resource";
Wenn die Datenbankverbindung instabil ist oder während des Abfrageprozesses ein Fehler auftritt (z. B. Zeitlimit, Datenbankfehler usw.), kann das Abfrageergebnis falsch sein, oder die zurückgegebenen Daten werden abgeschnitten, was schließlich zum Eigenschaftswertfehler führt.
Überprüfen Sie, ob die Datenbankverbindung normal ist, ob Netzwerkverzögerungs- oder Datenbankzeitüberschreitungen vorhanden sind.
Verwenden Sie einen Fehlerbehandlungsmechanismus, um Ausnahmen zu fangen und sicherzustellen, dass während der Verbindung keine Fehler auftreten.
try {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
} catch (PDOException $e) {
echo 'Verbindung ist fehlgeschlagen: ' . $e->getMessage();
}