Current Location: Home> Latest Articles> Facing Type Mismatch? Key Type Considerations When Using mysqli_result::$lengths

Facing Type Mismatch? Key Type Considerations When Using mysqli_result::$lengths

gitbox 2025-08-28
<?php<br>
// This code section is unrelated to the main content and is for demonstration purposes only<br>
echo "Starting script execution...\n";<br>
?></p>
<p><hr></p>
<p><?php<br>
/*<br>
Facing type mismatch? Key type considerations when using mysqli_result::$lengths<br>
*/</p>
<p>/**</p>
<ul>
<li>
<p>mysqli_result::$lengths is an array containing the length of data for each field in the result set.</p>
</li>
<li>
<p>When using it, be aware of the types of these length values and their usage context.<br>
*/</p>
</li>
</ul>
<p>$mysqli = new mysqli("localhost", "user", "password", "testdb");</p>
<p>if ($mysqli->connect_error) {<br>
die("Connection failed: " . $mysqli->connect_error);<br>
}</p>
<p>$sql = "SELECT id, name, description FROM products";<br>
$result = $mysqli->query($sql);</p>
<p>if ($result&ltspan> </span>instanceof mysqli_result) {<br>
</span>// $lengths is an array of integers, each element corresponds to the byte length of a field<br>
$lengths = $result->lengths;</p>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Field lengths array type: "</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">"Field lengths content:\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">/*
 * Key type points to note:
 * 1. $lengths is an array, each element is an integer (int).
 * 2. These lengths represent bytes, which may differ from string character counts, especially for multibyte characters.
 * 3. The $lengths array is only valid when using mysqli::store_result or default buffered results; it is unavailable with mysqli_use_result.
 * 4. Ensure $result is a valid mysqli_result object before accessing; otherwise, $lengths may not exist or cause errors.
 */</span>

</span><span><span class="hljs-comment">// Further example: use length info to process data</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><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> => </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 class="hljs-title function_ invoke__">array_keys</span></span>(</span><span><span class="hljs-variable">$row</span></span>));
        </span><span><span class="hljs-variable">$len</span></span><span> = </span><span><span class="hljs-variable">$lengths</span></span>[</span><span><span class="hljs-variable">$idx</span></span>] ?? </span><span><span class="hljs-literal">null</span></span>;

        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Field &#039;<span class="hljs-subst">{$field}</span>&#039; byte length: </span><span><span class="hljs-subst">{$len}</span></span><span>\n";</span></span>
        </span><span><span class="hljs-comment">// Note: $len here is the byte length, not necessarily the character count</span></span><span>
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"String character count: "</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 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>-></span><span><span class="hljs-title function_ invoke__">free</span></span><span>();

} else<span> {
echo "Query failed or returned no results.\n";
}

$mysqli->close();
?>


<?php
// This code section is unrelated to the main content and is for demonstration purposes only
echo "Script execution finished.\n";
?>