現在の位置: ホーム> 最新記事一覧> タイプの不一致に遭遇しますか? mysqli_result :: $ lengthsを使用する場合、どのような種類の問題が注意すべきかを確認してください

タイプの不一致に遭遇しますか? mysqli_result :: $ lengthsを使用する場合、どのような種類の問題が注意すべきかを確認してください

gitbox 2025-08-28
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// コードのこの部分は、テキストの内容とは何の関係もありません,たとえば、目的のみ</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"スクリプトの実行を開始します...\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
遭遇したタイプの不一致?見てください mysqli_result::$lengths 使用するときにどのような種類の問題に注意する必要がありますか
*/</span>

<span class="hljs-comment">/**
 * mysqli_result::$lengths アレイです,結果セットの各フィールドに対応するデータの長さが含まれています。
 * 使用するときは注意してください,これらの長さの値のタイプと使用シナリオ。
 */</span>

</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"user"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"testdb"</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"接続に失敗しました: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"SELECT id, name, description FROM products"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> </span><span><span class="hljs-keyword">instanceof</span></span><span> mysqli_result) {
    </span><span><span class="hljs-comment">// $lengths 整数の配列です,要素は各フィールドのバイト長に対応します</span></span><span>
    </span><span><span class="hljs-variable">$lengths</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-&gt;lengths;

    </span><span><span class="hljs-comment">// 例:長さの配列と印刷を取得します</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"フィールド長い配列タイプ: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">gettype</span></span><span>(</span><span><span class="hljs-variable">$lengths</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"フィールド長コンテンツ:\n"</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$lengths</span></span><span>);

    <span class="hljs-comment">/*
     * タイプの質問の重要なポイント:
     * 1. $lengths アレイです,そして、各要素は整数です(int)。
     * 2. これらの長さはバイトです,文字列長関数に注意してください strlen 取得できる文字の数は異なります,特にマルチバイト文字。
     * 3. $lengths 配列は使用されます mysqli::store_result または、デフォルトで結果をバッファリングするときに有効です,使用 mysqli_use_result いつ利用できません。
     * 4. 訪問する前に必ず確認してください $result それは効果的です mysqli_result 物体,さもないと $lengths 存在やエラーはありません。
     */</span>

    </span><span><span class="hljs-comment">// 进一步例:長さの情報を使用してデータを処理します</span></span><span>
    </span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
        </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$field</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
            </span><span><span class="hljs-variable">$idx</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_search</span></span><span>(</span><span><span class="hljs-variable">$field</span></span><span>, </span><span><span class="hljs-title function_ invoke__">array_keys</span></span><span>(</span><span><span class="hljs-variable">$row</span></span><span>));
            </span><span><span class="hljs-variable">$len</span></span><span> = </span><span><span class="hljs-variable">$lengths</span></span><span>[</span><span><span class="hljs-variable">$idx</span></span><span>] ?? </span><span><span class="hljs-literal">null</span></span><span>;

            </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"フィールド '<span class="hljs-subst">{$field}</span></span></span><span>' の値の長さ(バイト)のために:</span><span><span class="hljs-subst">{$len}</span></span><span>\n";
            </span><span><span class="hljs-comment">// に注意してください $len 是バイト长度,必ずしも文字列文字の数に等しいとは限りません</span></span><span>
            </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文字列文字の数:"</span></span><span> . </span><span><span class="hljs-title function_ invoke__">mb_strlen</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>) . </span><span><span class="hljs-string">"\n"</span></span><span>;
        }
    }

    </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">free</span></span><span>();
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"クエリに失敗したか、結果がありません。\n"</span></span><span>;
}

</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// コードのこの部分は、テキストの内容とは何の関係もありません,たとえば、目的のみ</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"スクリプト実行の終了。\n"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>