PHPを使用してMySQLデータベースを操作する場合、 mysqli_fetch_assoc()は、最も一般的な結果セット抽出方法の1つであり、結果セットの行を連想配列として返します。 mysqli_result :: $ lengthsはmysqli_resultクラスのプロパティです。結果セットから行を抽出した後、現在の行のフィールドのバイト長の配列を返します。
どちらも頻繁に言及されていませんが、特定のエッジシナリオ、特にデータの整合性チェック、バイナリデータ処理、動的UIレンダリングにおいて、非常に実用的です。この記事では、これら2つの関数を詳細に使用する際に、いくつかの実用的なヒントについて説明します。
mysqli_fetch_assoc()は、元のバイトサイズではなく、フィールドの「値」を取得します。 mysqli_result :: $ lengths送信の元のデータのバイト長を返します。これは、UTF-8文字またはBLOBタイプを扱うときに非常に重要です。
$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";
}
この手法は、ダイジェストの送信、ログデータ検証、HTTPヘッダーを介したコンテンツサイズの制限など、コンテンツの長さを正確に制御する必要があるシナリオに適しています。
エンコードの問題やストレージの制約により、フロントエンドから渡されたデータがデータベースによって切り捨てられる場合があります。 $ result-> lengthsを使用して、実際のコンテンツの長さが期待に達するかどうかを検出し、フィールドの最大長い制限と組み合わせて検証します。
たとえば、バイオフィールドの最大長の長さが65535バイトで、 $ lengths [1]が65535に正確に等しい場合、切り捨てられた可能性のあるテキストに慎重になる可能性があります。
中国語、日本、韓国語のキャラクターを含む豊富なテキストコンテンツまたはデータの場合、文字とバイトの数は非常に異なる場合があります。 strlen($ row ['field'])と$ result-> lengthsを組み合わせると、分布をエンコードする文字を評価できます。
$charLength = strlen($row['bio']);
$byteLength = $lengths[1];
if ($byteLength / $charLength > 2) {
echo "このフィールドには、マルチバイト文字が含まれている場合があります,推奨されるトランスコーディングまたは圧縮。";
}
特に大きなテキストやバイナリファイル(PDF、写真など)を返す場合、APIを休むときは、正確なコンテンツ長が必要です。 $ result-> lengthsと組み合わせて、ヘッダーを動的に設定できます。
header("Content-Type: text/plain");
header("Content-Length: " . $lengths[0]);
echo $row['document_text'];
これは、 https://gitbox.net/api/v1/documents/123/downloadと同様のファイルダウンロードインターフェイスを構築する場合に特に重要です。
データベースからの返されたデータを照会した文字または不足している文字に照会した場合、最初のステップは、strlen($ row ['field'])と$ result> lengths [index]と比較して、額面にないか、文字が間違って切り捨てられているかどうかを確認することです。
この方法は、特にバイナリコンテンツ処理のために、盲目的に文字列を印刷するよりも効率的です。
mysqli_result :: $ lengthsは、毎日の開発で頻繁に使用されるツールではありませんが、 MySQLのリターンデータの生のバイトをより深く制御する必要がある場合に重要な役割を果たすことができます。特に、敏感なコーディング、コンテンツの切り捨てに敏感な、または伝送帯域幅の最適化などのシナリオでは、使用を組み合わせることで、より大きな制御をもたらすことができます。
これらの手法を通じて、PHPとMySQLデータの相互作用の堅牢性を改善するだけでなく、その後の関数の拡大とパフォーマンスの最適化のための優れた基盤を築くことができます。