Current Location: Home> Latest Articles> How Big Is the Performance Difference Between PDOStatement::fetchColumn and PDOStatement::fetchAll?

How Big Is the Performance Difference Between PDOStatement::fetchColumn and PDOStatement::fetchAll?

gitbox 2025-09-18
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// The following is a PHP code example unrelated to the article content</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">randomGreeting</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
    </span><span><span class="hljs-variable">$greetings</span></span><span> = [</span><span><span class="hljs-string">"Hello!"</span></span><span>, </span><span><span class="hljs-string">"Hi!"</span></span><span>, </span><span><span class="hljs-string">"Hey there!"</span></span><span>, </span><span><span class="hljs-string">"Greetings!"</span></span><span>];
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$greetings</span></span><span>[</span><span><span class="hljs-title function_ invoke__">array_rand</span></span><span>(</span><span><span class="hljs-variable">$greetings</span></span><span>)];
}
<p></span>echo randomGreeting();<br>
?></p>
<p><hr></p>
<p><?php<br>
// Main content starts here<br>
?></p>
<p><h1>PDOStatement::fetchColumn vs PDOStatement::fetchAll: How Big Is the Performance Difference?</h1></p>
<p><p>When using PDO for database operations in PHP, it’s common to encounter <code>PDOStatement::fetchColumn<span>

In the above example, each loop only retrieves one row’s id, which results in very low memory usage.

fetchAll Example:


</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>);
</span><span><span class="hljs-variable">$rows</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetchAll</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$rows</span></span> </span><span><span class="hljs-keyword">as</span></span> </span><span><span class="hljs-variable">$row</span></span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">&#039;id&#039;</span></span><span>] . </span><span><span class="hljs-string">&#039; - &#039;</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">&#039;name&#039;</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
}

fetchAll loads the entire result set into memory at once. If the table is very large, this can negatively affect performance.

4. Conclusion

To summarize:

  • If you only need a single column or a small amount of data, fetchColumn() is the better choice. It’s more memory-efficient and performs better.
  • If you need to process the entire result set at once and the dataset is manageable, fetchAll() is more convenient, but it requires more memory.
  • In large data scenarios, avoid fetchAll when possible. Instead, use fetch or fetchColumn to process data in chunks.

<?php
// PHP code example unrelated to the article content (footer)
function printTimestamp() {
echo "Current timestamp: " . time();
}

printTimestamp();
?>