人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPのデーターベースからデーターを引き出す事についての質問です。

PDOを使った場合、

http://php.net/manual/ja/pdo.query.php

上記サイトにある

<?php
function getFruit($conn) {
$sql = 'SELECT name, color, calories FROM fruit ORDER BY name';
foreach ($conn->query($sql) as $row) {
print $row['name'] . "\t";
print $row['color'] . "\t";
print $row['calories'] . "\n";
}
}
?>

のようにfetchを使わない方法があるらしいのですが、

「関数のコールが1回の時に使用できる」とあるのですが、

関数のコールが1回とは、どのような状態の事なのですか?


みなさんは、query($sql)とfetchをどの様に使いわけているのでしょうか?

●質問者: situmon2014
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tezcello
●100ポイント ベストアンサー

> 「関数のコールが1回の時に使用できる」とあるのですが
マニュアルにはそのようには書かれていないと思います。

一回の関数コールの中で SQL ステートメントを実行し、このステートメントにより返された 結果セット (ある場合) を PDOStatement オブジェクトとして返します。



> query($sql)とfetchをどの様に使いわけているのでしょうか?
query() と fetch() を使い分けるというよりは、結果の帰らないSQLを投げたから fetch() は無意味って事はあるでしょうが。
個人的にはそのような場合は exec() を使います。
__つまり exec() と query() はそのように使い分けている


tezcelloさんのコメント
foreach での使用が前提なら fetch() ではなく fetchAll() ですね。 __fetch() なら while ループかな foreach と while をどのように使い分けるかという質問と同義かもしれませんねぇ...「お好きなものをお使いください」という感じになってしまうと思います。 query() の返す結果セットをそのまま使うのと、fetch() あるいは fetchAll() を使うのとは機能面でいうと、指定できるフェッチスタイルが少々違うので、その辺りを意識する必要があるかどうかだと思います。 デフォルトのフェッチスタイルを変更しておくのなら、増々差が無いと思います。 __やっぱりお好きな方をという事に... fetchAll() で受け取ってから foreach で回すのは配列に移し替えるコストがもったいないという人もいる様ですが、巨大なものでなければ大差はない様に思います。

situmon2014さんのコメント
大変勉強になりました、ご回答ありがとうございました!

質問者から

「結果セットの反復処理をする際に、「PDO::query」が返すPDOStatementを使って「foreach()」で行うか、あるいは「PDOStatement::fetch」で行うかをどのように使い分けているのかという疑問でしょうか?」

説明が不足してました。その通りです、その様な意味で質問しました。

上記の2つは、どのように使い分けるのでしょうか?


関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ