Beim Betrieb einer MySQL -Datenbank mit PHP ist MySQLI_Fetch_assoc () eine der häufigsten Ergebnisse, die eine Zeile des als assoziativen Arrays festgelegten Ergebnis -Sets zurückgeben. Mysqli_Result :: $ Längen ist eine Eigenschaft der MySQLI_Result -Klasse. Nachdem Sie eine Zeile aus dem Ergebnissatz extrahiert haben, gibt es eine Reihe von Bytelängen der Felder der Stromlinie zurück.
Beide sind zwar nicht oft erwähnt, sind aber sehr praktisch, wenn es sich um bestimmte Kantenszenarien handelt, insbesondere bei der Überprüfung der Datenintegrität, der Binärdatenverarbeitung und der dynamischen Benutzeroberfläche. In diesem Artikel werden einige praktische Tipps untersucht, wenn diese beiden Funktionen ausführlich verwendet werden.
mysqli_fetch_assoc () erhält den "Wert" des Feldes, nicht die ursprüngliche Bytegröße. MySQLI_Result :: $ Längen gibt die Byte-Länge der Originaldaten in der Übertragung zurück, was bei der Behandlung von UTF-8-Zeichen oder Blob-Typen sehr wichtig ist.
$conn = new mysqli("localhost", "user", "password", "database");
$result = $conn->query("SELECT name, bio FROM users");
while ($row = $result->fetch_assoc()) {
$lengths = $result->lengths;
echo "Name: " . $row['name'] . " (Length: " . $lengths[0] . " bytes)\n";
echo "Bio: " . $row['bio'] . " (Length: " . $lengths[1] . " bytes)\n";
}
Diese Technik eignet sich für Szenarien, in denen die Inhaltslänge genau gesteuert werden muss, z. B. das Senden von Verdauungen, die Überprüfung der Protokolldaten oder die Begrenzung der Inhaltsgröße durch HTTP -Header.
Manchmal können Daten, die vom Frontend übergeben werden, aufgrund von Codierungsproblemen oder Speicherbeschränkungen von der Datenbank abgeschnitten werden. Verwenden Sie $ result-> Längen, um festzustellen, ob die tatsächliche Inhaltslänge die Erwartungen erreicht, und überprüfen Sie sie in Kombination mit der maximalen Längengrenze des Feldes.
Wenn beispielsweise die maximale Länge des Bio -Feldes 65535 Bytes und $ Längen [1] entspricht 65535 beträgt, können Sie sich gegen den Text, der möglicherweise abgeschnitten wurde, vorsichtig sein.
Für reichhaltige Textinhalte oder Daten, die chinesische, japanische und koreanische Zeichen enthalten, kann die Anzahl der Zeichen und Bytes sehr unterschiedlich sein. Das Kombinieren von Strlen ($ row ['field']) mit $ result-> Längen kann die Charaktercodierungsverteilung bewerten.
$charLength = strlen($row['bio']);
$byteLength = $lengths[1];
if ($byteLength / $charLength > 2) {
echo "Dieses Feld kann Multibyte -Zeichen enthalten,Empfohlene Transkodierung oder Komprimierung。";
}
Beim Erstellen von REST-APIs, insbesondere wenn große Text- oder Binärdateien (z. B. PDFs, Bilder) zurückgegeben werden, ist eine genaue Inhaltslänge erforderlich. In Kombination mit $ result-> Längen können Sie den Header dynamisch einstellen.
header("Content-Type: text/plain");
header("Content-Length: " . $lengths[0]);
echo $row['document_text'];
Dies ist besonders wichtig, wenn eine Datei -Download -Schnittstelle ähnlich wie https://gitbox.net/api/v1/documents/123/download erstellt wird.
Wenn Sie die zurückgegebenen Daten aus der Datenbank zu verstümmelten oder fehlenden Zeichen abfragen, besteht der erste Schritt darin , Strlen ($ row ['field']) mit $ result-> Längen [Index] zu vergleichen, um festzustellen, ob es irgendwelche Codierung gibt, die nicht auf NAH sind oder die Zeichen versehentlich abgeschnitten werden.
Diese Methode ist effizienter als blind drucken Strings, insbesondere für die Binärinhaltsverarbeitung.
MySQLI_Result :: $ Längen ist kein Tool, das häufig in der täglichen Entwicklung verwendet wird, aber es kann eine wichtige Rolle spielen, wenn Sie eine tiefere Kontrolle über die rohen Bytes von MySQLs Returndaten benötigen. Insbesondere in Szenarien wie der Codierung sensibler, inhaltsempfindlicher oder der Optimierung der Transmissionsbandbreite kann die kombinierte Verwendung eine höhere Kontrolle bringen.
Durch diese Techniken kann es nicht nur die Robustheit von PHP- und MySQL -Dateninteraktion verbessern, sondern auch eine gute Grundlage für die nachfolgende Funktionserweiterung und Leistungsoptimierung bilden.
Verwandte Tags:
mysqli_result