Bei der Verwendung von PHP für die Datenbankentwicklung ist die MySQLI -Erweiterung eine der am häufigsten verwendeten Datenbankvorgänge. Die Eigenschaft von MySQLi_Result :: $ field_count wird verwendet, um die Anzahl der Felder (Spalten) im Ergebnissatz zu erhalten. In der tatsächlichen Entwicklung können Entwickler jedoch auf einen Fehler oder eine undefinierte Situation stoßen, in der MySQLI_Result :: $ field_count gemeldet wird. Dieser Artikel analysiert die gemeinsamen Ursachen dieses Problems und liefert entsprechende Lösungen.
Entwickler können auf Fehler auffordern, die wie folgt ähneln:
Fatal error: Uncaught Error: Undefined property: mysqli_result::$field_count in ...
oder:
Trying to access array offset on value of type bool
Diese Fehleraufforderungen zeigen, dass beim Versuch, auf die Eigenschaft field_count zuzugreifen, das Objekt von MySQLI_Result nicht korrekt zurückgegeben wird und möglicherweise nicht einmal ein Objekt ist.
Wenn die SQL -Abfrageausführung fehlschlägt, gibt die Methode mySQLi :: query () falsche anstelle eines mySQLi_Result -Objekts zurück. Wenn der nächste Code als Ergebnis eingestuft wird, tritt ein Fehler beim Zugriff auf das Attribut auf natürliche Weise auf.
Beispielcode:
$mysqli = new mysqli('localhost', 'root', '', 'test');
$result = $mysqli->query("SELECT * FROM non_existing_table");
echo $result->field_count; // Einen Fehler melden:Kein Objekt
Lösung:
Stellen Sie vor dem Zugriff auf die Eigenschaft field_count zuerst fest, ob die Abfrage erfolgreich ist:
if ($result instanceof mysqli_result) {
echo $result->field_count;
} else {
echo "Abfrage fehlgeschlagen:" . $mysqli->error;
}
Einige SQL -Anweisungen wie Einfügen , Aktualisieren und Löschen geben das Ergebnissatz nicht zurück. Zu diesem Zeitpunkt gibt Query () true zurück, und der Zugriff auf field_count verursacht ebenfalls einen Fehler.
Beispielcode:
$result = $mysqli->query("UPDATE users SET name = 'test' WHERE id = 1");
echo $result->field_count; // Einen Fehler melden:Kein Objekt
Lösung:
Unterscheiden Sie verschiedene Arten von SQL -Anweisungen und verwenden Sie Field_Count nur für Abfragen, die MySQLi_Result -Objekte zurückgeben:
$result = $mysqli->query("SELECT * FROM users");
if ($result instanceof mysqli_result) {
echo "Anzahl der Spalten:" . $result->field_count;
} else {
echo "Kein Abfrageergebnissatz,Ausführungsstatus:" . ($result ? 'Erfolg' : 'scheitern');
}
Einige ältere Versionen von PHP oder der MySQLI -Erweiterung sind nicht korrekt aktiviert, können dazu führen, dass die relevanten Eigenschaften nicht verfügbar sind.
Lösung:
Bestätigen Sie die PHP- und MySQLI -Erweiterungsversionen:
phpinfo();
Stellen Sie sicher, dass die MySQLI -Erweiterung aktiviert ist und empfohlen wird, dass die PHP -Version 7,4 und höher ist.
Field_Count ist eine Instanzeigenschaft, und wenn der fälschliche Zugriff auf sie über den statischen Modus zugreifen kann, führt dies zu undefinierten oder fehlern.
Fehlerbeispiel:
echo mysqli_result::$field_count; // Fehler
Der richtige Weg:
echo $result->field_count;
In einigen Fällen können Entwickler externe Daten fälschlicherweise als MySQLI_Result analysieren, wie z. B. von der API abgerufene Daten:
$response = file_get_contents("https://gitbox.net/api/data");
$data = json_decode($response);
echo $data->field_count; // Eigentlich nicht mysqli_result Objekt
Lösung:
Stellen Sie sicher, dass Sie das richtige Typ -Objekt verwenden, und fällen Sie Typen Urteile:
if ($data instanceof mysqli_result) {
echo $data->field_count;
} else {
echo "类型Fehler,Zugang kann nicht zugänglich field_count";
}
Um die Robustheit des Codes zu verbessern, wird empfohlen, die Abfragelogik einheitlich zu verkapulieren:
function safe_query($mysqli, $sql) {
$result = $mysqli->query($sql);
if ($result instanceof mysqli_result) {
return $result;
} else {
error_log("SQL Error: " . $mysqli->error);
return false;
}
}
// Wie man benutzt
$result = safe_query($mysqli, "SELECT * FROM users");
if ($result) {
echo "Anzahl der Spalten:" . $result->field_count;
}
Der Grund, warum MySQLi_Result :: $ field_count einen Fehler meldet oder nicht definiert ist, liegt häufig darin, dass der Entwickler die Rückgabeergebnis -Typ der Abfrage () oder die Nutzungsumgebung und die Aufrufmethode nicht richtig behandelt. Mit den oben genannten Methoden können Entwickler solche Fehler effektiv vermeiden und einen sichereren und robusteren PHP -Datenbankoperationscode schreiben.