PHPでデータベースから情報を取り出すときによく使われる fetch()
や fetchAll()
。
最初は「何が違うの?」「All ってつけないとどうなるの?」と疑問だったけれど、
今日じっくり向き合って、ようやく自分の言葉で腑に落ちる感覚が得られたので記録しておきます。
✅ fetchAll():まとめて全部テーブルに出す
$tasks = $stmt->fetchAll(PDO::FETCH_ASSOC);
- 実行結果の全レコードを配列で丸ごと取得
- イメージ:データベースという書庫から持ってきた全ての書類を机の上に並べる
- 小さいデータ量なら便利。でも、大量データには向かない
✅ fetch():1件ずつ順番に受け取っていく
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['task'];
}
- 毎回「次の1件だけ」を取得
- イメージ:1枚の紙をもらって処理して、終わったら片付けて次へ
- メモリ効率がよく、100万件とかあっても安心して処理できる
🎯 fetch という言葉に込められた意味
英語の fetch
には「どこかへ行って、何かを取ってきて戻る」というニュアンスがある。
get
よりも「取りに行く動作」を感じさせる- まさに、データベースから1行ずつ取りに行くという処理にピッタリ
この言葉の感性って、なかなか日本語だけでは浮かびにくい。
でも、その動作のイメージを持つことで「fetch の正体」がぐっと鮮明になる。
✨ 今日の理解をひと言で
fetch()
は、実行済みのSQLステートメントに対して「結果をひとつずつ読み出す操作」。
それは「データを配列にして持ってくる」というより、「次の資料を一枚ずつ請求する」感覚。
そして$stmt
は「SQL文の実行結果や状態を保持する概念」だと理解した。
🔚 おわりに
最初はなんとなく使ってた fetch()
や fetchAll()
。
でも実は、「データの取り方の違い」がちゃんとあることがわかった。
fetch()
は1件ずつもらうやり方。fetchAll()
は全部まとめて受け取るやり方。
それがわかったので、これからは「どっち使うべきか?」考えられるようになった。
今後も「この関数ってどういうイメージなんだろう?」ってところから掘っていきたい。
コメント