夏喻 發表於 2026-5-3 17:24:36

php中mysqli_fentch四种常用查询函数的比较表及实例演示详解

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、比较表</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">补充说明</a></li></ul><li><a href="#_label1">二、示例</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_1">1.mysqli_fetch_array</a></li><li><a href="#_lab2_1_2">2.mysqli_fetch_assoc</a></li><li><a href="#_lab2_1_3">3.mysqli_fetch_row</a></li><li><a href="#_lab2_1_4">4.mysqli_fetch_object</a></li><li><a href="#_lab2_1_5">关键区别总结:</a></li><ul class="third_class_ul"><li><a href="#_label3_1_5_0">索引方式&zwnj;:</a></li><li><a href="#_label3_1_5_1">&zwnj;性能&zwnj;:</a></li><li><a href="#_label3_1_5_2">&zwnj;适用场景&zwnj;:</a></li></ul></ul><li><a href="#_label2">总结&nbsp;</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>一、比较表</h2>
<p>以下是PHP中<code>mysqli_fetch</code>系列四种常用查询函数(<code>mysqli_fetch_array</code>、<code>mysqli_fetch_assoc</code>、<code>mysqli_fetch_row</code>、<code>mysqli_fetch_object</code>)的比较表,涵盖返回类型、索引方式、参数、性能特点及适用场景等关键方面,帮助开发者快速选择合适函数。</p>
<table><thead><tr><th>函数名</th><th>返回类型</th><th>索引方式</th><th>参数</th><th>使用示例</th><th>主要特点与适用场景</th></tr></thead><tbody><tr><td>&zwnj;mysqli_fetch_array&zwnj;</td><td>数组</td><td>可选:关联数组、数字索引数组或两者兼有(默认)</td><td><code>result_type</code>:&nbsp;<code>MYSQLI_BOTH</code>(默认)、<code>MYSQLI_ASSOC</code>、<code>MYSQLI_NUM</code></td><td><code>$row = $result-&gt;fetch_array(); echo $row[&#39;name&#39;] . $row;</code></td><td>灵活性高,但可能冗余;可通过参数控制返回格式,适合需同时访问字段名和数字索引的场景。</td></tr><tr><td>&zwnj;mysqli_fetch_assoc&zwnj;</td><td>数组</td><td>仅关联数组(字段名作为键)</td><td>无</td><td><code>$row = $result-&gt;fetch_assoc(); echo $row[&#39;name&#39;];</code></td><td>返回纯关联数组,代码可读性好;性能优于<code>mysqli_fetch_array</code>(无多余索引),适合需明确字段名的查询。</td></tr><tr><td>&zwnj;mysqli_fetch_row&zwnj;</td><td>数组</td><td>仅数字索引数组(按查询字段顺序)</td><td>无</td><td><code>$row = $result-&gt;fetch_row(); echo $row;</code></td><td>高效轻量(仅数字索引);适用于字段顺序固定或不关心字段名的场景,如快速导出数据。</td></tr><tr><td>&zwnj;mysqli_fetch_object&zwnj;</td><td>对象</td><td>属性访问(字段名作为属性)</td><td>无</td><td><code>$row = $result-&gt;fetch_object(); echo $row-&gt;name;</code></td><td>面向对象风格;需通过<code>-&gt;</code>访问属性,适合集成到类或需链式操作的场景,但创建对象稍慢。</td></tr></tbody></table>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>补充说明</h3>
<ul><li><p>&zwnj;<strong>性能对比&zwnj;:</strong><code>mysqli_fetch_row</code>通常最快(仅数字索引),<code>mysqli_fetch_object</code>稍慢(需实例化对象),而<code>mysqli_fetch_array</code>和<code>mysqli_fetch_assoc</code>居中。优先选择最简索引方式以优化性能。</p></li><li><p><strong>&zwnj;结果集处理&zwnj;:</strong>所有函数逐行移动结果集指针,末尾返回<code>false</code>(数组函数)或<code>null</code>(对象函数)。</p></li><li><p>&zwnj;<strong>错误处理&zwnj;:</strong>查询失败时<code>mysqli_query</code>返回<code>false</code>,需先验证结果集再调用fetch函数。</p></li><li><p>&zwnj;<strong>推荐实践&zwnj;:</strong></p>
<ul><li><p>明确字段名时用<code>mysqli_fetch_assoc</code>(简洁高效)。</p></li><li><p>需混合索引时用<code>mysqli_fetch_array</code>(参数控制)。</p></li><li><p>面向对象代码用<code>mysqli_fetch_object</code>。</p></li><li><p>高性能批量处理用<code>mysqli_fetch_row</code>。</p></li></ul></li></ul>
<p>此表综合了函数的核心差异,实际选择应结合查询需求和数据访问模式。</p>
<p class="maodian"><a name="_label1"></a></p><h2>二、示例</h2>
<p>以下是PHP中<code>mysqli_fetch</code>四种查询函数的实例输出对比,通过<code>print_r</code>展示不同返回格式(用<code>&lt;pre&gt;</code>标签清晰呈现出不同,方便大家对比):</p>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>1.mysqli_fetch_array</h3>
<p>&zwnj;特点&zwnj;:默认返回同时包含数字索引和关联索引的数组(<code>MYSQLI_BOTH</code>)。</p>
<div class="jb51code"><pre class="brush:php;">$result = $conn-&gt;query("SELECT id, name FROM users");
$row = $result-&gt;fetch_array(); // 默认 MYSQLI_BOTH
echo "&lt;pre&gt;"; print_r($row); echo "&lt;/pre&gt;";</pre></div>
<p>&zwnj;输出&zwnj;:</p>
<div class="jb51code"><pre class="brush:php;">Array
(
    =&gt; 1         // 数字索引
    =&gt; 1      // 关联索引
    =&gt; "Alice"   // 数字索引
    =&gt; "Alice" // 关联索引
)</pre></div>
<p class="maodian"><a name="_lab2_1_2"></a></p><h3>2.mysqli_fetch_assoc</h3>
<p>&zwnj;特点&zwnj;:仅返回关联索引数组(字段名作为键)。</p>
<div class="jb51code"><pre class="brush:php;">$row = $result-&gt;fetch_assoc();
echo "&lt;pre&gt;"; print_r($row); echo "&lt;/pre&gt;";</pre></div>
<p>&zwnj;输出&zwnj;:</p>
<div class="jb51code"><pre class="brush:php;">Array
(
    =&gt; 1
    =&gt; "Alice"
)</pre></div>
<p class="maodian"><a name="_lab2_1_3"></a></p><h3>3.mysqli_fetch_row</h3>
<p>&zwnj;特点&zwnj;:仅返回数字索引数组(按查询字段顺序)。</p>
<div class="jb51code"><pre class="brush:php;">$row = $result-&gt;fetch_row();
echo "&lt;pre&gt;"; print_r($row); echo "&lt;/pre&gt;";</pre></div>
<p>&zwnj;输出&zwnj;:</p>
<div class="jb51code"><pre class="brush:php;">Array
(
    =&gt; 1
    =&gt; "Alice"
)</pre></div>
<p class="maodian"><a name="_lab2_1_4"></a></p><h3>4.mysqli_fetch_object</h3>
<p>&zwnj;特点&zwnj;:返回对象,通过属性访问字段。</p>
<div class="jb51code"><pre class="brush:php;">$row = $result-&gt;fetch_object();
echo "&lt;pre&gt;"; print_r($row); echo "&lt;/pre&gt;";</pre></div>
<p>&zwnj;输出&zwnj;:</p>
<div class="jb51code"><pre class="brush:php;">stdClass Object
(
    =&gt; 1
    =&gt; "Alice"
)</pre></div>
<p class="maodian"><a name="_lab2_1_5"></a></p><h3>关键区别总结:</h3>
<p class="maodian"><a name="_label3_1_5_0"></a></p><h4>索引方式&zwnj;:</h4>
<ul><li>fetch_array:双索引(数字+关联)。</li><li>fetch_assoc:仅关联索引。</li><li>&nbsp;fetch_row:仅数字索引。</li><li>fetch_object:对象属性。</li></ul>
<p class="maodian"><a name="_label3_1_5_1"></a></p><h4>&zwnj;性能&zwnj;:</h4>
<p>fetch_row最快(无额外索引),fetch_object稍慢(需实例化)。</p>
<p class="maodian"><a name="_label3_1_5_2"></a></p><h4>&zwnj;适用场景&zwnj;:</h4>
<ul><li>明确字段名时用fetch_assoc;</li><li>需混合索引用fetch_array;</li><li>面向对象代码用fetch_object;</li><li>高性能处理用fetch_row。</li></ul>
<p class="maodian"><a name="_label2"></a></p><h2>总结&nbsp;</h2>
頁: [1]
查看完整版本: php中mysqli_fentch四种常用查询函数的比较表及实例演示详解