MySQLI_Result :: Field_seek ist eine Methode, mit der Feldzeiger in mySQLi-objektorientierter Schnittstelle verschoben werden. Seine Definition ist wie folgt:
bool mysqli_result::field_seek(int $field_offset)
$ field_offset zeigt die Feldnummer an, auf die der Feldzeiger verschoben werden soll, und die Sequenznummer startet von 0.
Der Rückgabewert ist boolean, gibt für den Erfolg den wahren Erfolg zurück und kehrt falsch für das Scheitern zurück.
Diese Methode wird häufig in Szenarien verwendet, in denen bestimmte Feldinformationen erhalten werden müssen, z. B. Feldnamen, Typen usw.
Das häufigste Problem ist, dass der eingehende Parameter von $ field_offset den Felderbereich im Ergebnissatz liegt. Zum Beispiel gibt es im Ergebnissatz nur 3 Felder, aber Field_seek (5) wird aufgerufen, was zu einem Fehler verursacht und falsch zurückgegeben wird.
$result = $mysqli->query("SELECT id, name, age FROM users");
$result->field_seek(5); // Fehler,Außerhalb der Reichweite
Lösung:
Verwenden Sie vor dem Anruf $ result-> field_count, um die Gesamtzahl der Felder zu erhalten, um sicherzustellen, dass der Offset legal ist.
$fieldCount = $result->field_count;
if ($offset >= 0 && $offset < $fieldCount) {
$result->field_seek($offset);
} else {
// Ausnahmen behandeln
}
MySQLI_Result :: Field_seek kann nur zu gültigen Abfragenergebnissen aufgerufen werden. Wenn die Abfrage fehlschlägt oder keine Ergebnisse enthält, meldet das Aufrufen dieser Methode einen Fehler.
$result = $mysqli->query("INVALID SQL");
$result->field_seek(0); // Meldet einen Fehler,Weil$resultKein gültiges Ergebnisobjekt
Lösung:
Stellen Sie vor dem Anruf fest, ob die Abfrage erfolgreich ist.
$result = $mysqli->query("SELECT * FROM table");
if ($result instanceof mysqli_result) {
$result->field_seek(0);
} else {
// Die Abfrage nicht bearbeiten
}
Nachdem Field_seek und Fetch_field in einer Schleife verwendet werden, erhöht es, wenn das Ergebnissatz nicht rechtzeitig freigegeben wird, den Speicher Fußabdruck.
$result = $mysqli->query("SELECT * FROM table");
$result->field_seek(1);
// Den Verarbeitungscode weglassen
// Nicht gerufen $result->free()
Lösung:
Rufen Sie nach der Verwendung des Ergebnissatzes $ result-> Free () auf, um die Ressource zu veröffentlichen.
$result->free();
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_errno) {
die("Verbindung ist fehlgeschlagen: " . $mysqli->connect_error);
}
$query = "SELECT id, name, email FROM users";
$result = $mysqli->query($query);
if ($result instanceof mysqli_result) {
$fieldCount = $result->field_count;
for ($i = 0; $i < $fieldCount; $i++) {
if ($result->field_seek($i)) {
$fieldInfo = $result->fetch_field();
echo "Feldname: " . $fieldInfo->name . "\n";
echo "Feldtyp: " . $fieldInfo->type . "\n";
echo "--------------------\n";
} else {
echo "Der bewegliche Feldzeiger ist fehlgeschlagen,Index: $i\n";
}
}
$result->free();
} else {
echo "Abfrage fehlgeschlagen: " . $mysqli->error;
}
$mysqli->close();
?>
Stellen Sie sicher, dass der Feldindex, der in Field_seek aufgerufen wird, die Gesamtzahl der Felder nicht überschreitet.
Überprüfen Sie, ob das Abfrageergebnis vor dem Anruf gültig ist.
Lösen Sie die Ressource für die Ergebnisse nach Verwendung, um Speicherlecks zu vermeiden.
Wenn field_seek fehlschlägt, überprüfen Sie die Richtigkeit der Parameter und Abfrageergebnisse so schnell wie möglich.
Durch das Beherrschen dieser Techniken können Sie die meisten häufigsten Fehler vermeiden, wenn Sie MySQLI_Result :: Field_seek verwenden, Probleme schnell lokalisieren und beheben und die Entwicklungseffizienz und die Code -Robustheit verbessern.