Aktueller Standort: Startseite> Neueste Artikel> So erkennen Sie, ob es Felder gibt, die die Längengrenze überschreiten, wenn Sie MySQLI_Result :: $ Längen verwenden

So erkennen Sie, ob es Felder gibt, die die Längengrenze überschreiten, wenn Sie MySQLI_Result :: $ Längen verwenden

gitbox 2025-06-06

Bei der Verwendung von PHP -Erweiterung von PHP für Datenbankvorgänge können wir die tatsächliche Länge jedes Feldes in der aktuellen Zeile über die Eigenschaft mySQLi_Result :: $ Längen erhalten. Diese Eigenschaft ist besonders nützlich, wenn es sich um binäre oder variable Längenfelder (z. B. Blob, Text) handelt. Aber wie erkennen Sie, ob Sie sich Sorgen darüber machen, ob die Feldlänge die erwartete oder definierte Grenze überschreitet? In diesem Artikel werden Sie Schritt für Schritt erfordern, um zu verstehen, wie dieses Ziel erreicht werden kann.

Was ist MySQLI_Result :: $ Längen

Mysqli_Result :: $ Längen ist ein Attribut des MySQLi_Result -Objekts. Es gibt ein Array zurück, in dem jedes Element im Array die Bytelänge jedes Feldes in einer Zeile im aktuellen Ergebnissatz darstellt. Dieser Wert ist die tatsächliche Länge der Daten, nicht die definierte Länge des Datenbankfelds.

Beispiel für das Nutzungsszenario

Angenommen, wir haben die folgende MySQL -Tabellenstruktur:

 CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(20),
    bio TEXT
);

Wir möchten sicherstellen, dass das aus der Datenbank abgerufene Benutzernamefeld die Grenze von VARCHAR (20) , d. H. 20 Zeichen, nicht überschreitet.

Beispielcode: Erkennen Sie, ob die Feldlänge die Grenze überschreitet

Wir können die Felddefinition und die $ ergebnis-> Länge kombinieren, um die Funktion der Erkennung zu erkennen, ob das Feld zu lang ist.

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");
$query = "SELECT id, username, bio FROM users";
$result = $mysqli->query($query);

if ($result) {
    // Information von Felddefinition erhalten
    $fields = $result->fetch_fields();
    
    while ($row = $result->fetch_assoc()) {
        $lengths = $result->lengths;
        foreach ($fields as $index => $field) {
            $fieldName = $field->name;
            $maxLength = $field->length;

            // Beachten:für VARCHAR Und CHAR Felder,$field->length Es ist die Charakterlänge * Maximale Anzahl von Bytes in Zeichensatz
            // Die tatsächliche Konvertierung muss mit dem Zeichensatz kombiniert werden,Angenommen hier UTF-8(am meisten 3-4 Byte/Charakter)
            $expectedBytes = $maxLength * 4;

            if ($lengths[$index] > $expectedBytes) {
                echo "Felder '{$fieldName}' Die Inhaltslänge übersteigt die erwartete Grenze:{$lengths[$index]} Byte\n";
            }
        }
    }
}
$mysqli->close();
?>

Dinge zu beachten

  1. $ field-> Länge wird normalerweise durch die maximale Anzahl von Bytes angegeben und kann nicht direkt zur Zeichenlänge entsprechen. Insbesondere bei Verwendung von Multi-Byte-Zeichensätzen (wie UTF-8) muss die Beziehung zwischen Bytes und Zeichen konvertiert werden.

  2. Für Blob- oder Texttypfelder ermöglicht MySQL selbst größere Längen, sodass Sie die Grenzkriterien basierend auf der Geschäftslogik anpassen müssen.

  3. Wenn der Feldinhalt entkommen oder codiert wurde, kann auch die Bytelänge erhöht werden. Daher können $ ergebnis-> Längen nur als Schätzmethode verwendet werden. Es wird weiterhin empfohlen, das Urteilsvermögen mit Geschäftsregeln zu kombinieren, wenn sie tatsächlich verwendet werden.

Fortgeschrittene Nutzung: Ausnahmebefelder protokollieren

Felder, die die Grenze überschreiten, können in das Protokoll zur Fehlerbehebung von Datenquellenproblemen oder Geschäftslogikfehlern angemeldet werden.

 if ($lengths[$index] > $expectedBytes) {
    file_put_contents("/var/log/field_overflow.log", date('c') . " - Felder '{$fieldName}' Grenze überschritten。Länge: {$lengths[$index]}\n", FILE_APPEND);
}

Sie können auch über die Webschnittstelle alarmieren, z. B. eine Schnittstelle, die ähnlich wie https://gitbox.net/api/notify?type=length_Warning zu Alert aufrufen.

Abschluss

Durch die Kombination von MySQLI_Result :: $ Längen und Fetch_Fields () können wir effektiv überwachen, ob die Feldlänge in der Datenbank die Erwartungen entspricht. Bei mehrsprachigen und Multi-Charakter-Set-Systemen ist diese Erkennung besonders kritisch und kann Entwicklern helfen, potenzielle Datenprobleme im Voraus zu erkennen. Es wird empfohlen, eine solche Logik in Hochrisikoprozesse wie Datenimport- und Benutzereingaben zu integrieren, um die Robustheit des Systems zu verbessern.