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をどの様に使いわけているのでしょうか?
> 「関数のコールが1回の時に使用できる」とあるのですが
マニュアルにはそのようには書かれていないと思います。
一回の関数コールの中で SQL ステートメントを実行し、このステートメントにより返された 結果セット (ある場合) を PDOStatement オブジェクトとして返します。
> query($sql)とfetchをどの様に使いわけているのでしょうか?
query() と fetch() を使い分けるというよりは、結果の帰らないSQLを投げたから fetch() は無意味って事はあるでしょうが。
個人的にはそのような場合は exec() を使います。
__つまり exec() と query() はそのように使い分けている
> 「関数のコールが1回の時に使用できる」とあるのですが
マニュアルにはそのようには書かれていないと思います。
一回の関数コールの中で SQL ステートメントを実行し、このステートメントにより返された 結果セット (ある場合) を PDOStatement オブジェクトとして返します。
> query($sql)とfetchをどの様に使いわけているのでしょうか?
query() と fetch() を使い分けるというよりは、結果の帰らないSQLを投げたから fetch() は無意味って事はあるでしょうが。
個人的にはそのような場合は exec() を使います。
__つまり exec() と query() はそのように使い分けている
foreach での使用が前提なら fetch() ではなく fetchAll() ですね。
__fetch() なら while ループかな
foreach と while をどのように使い分けるかという質問と同義かもしれませんねぇ...「お好きなものをお使いください」という感じになってしまうと思います。
query() の返す結果セットをそのまま使うのと、fetch() あるいは fetchAll() を使うのとは機能面でいうと、指定できるフェッチスタイルが少々違うので、その辺りを意識する必要があるかどうかだと思います。
デフォルトのフェッチスタイルを変更しておくのなら、増々差が無いと思います。
__やっぱりお好きな方をという事に...
fetchAll() で受け取ってから foreach で回すのは配列に移し替えるコストがもったいないという人もいる様ですが、巨大なものでなければ大差はない様に思います。
大変勉強になりました、ご回答ありがとうございました!
「結果セットの反復処理をする際に、「PDO::query」が返すPDOStatementを使って「foreach()」で行うか、あるいは「PDOStatement::fetch」で行うかをどのように使い分けているのかという疑問でしょうか?」
説明が不足してました。その通りです、その様な意味で質問しました。
上記の2つは、どのように使い分けるのでしょうか?
foreach での使用が前提なら fetch() ではなく fetchAll() ですね。
2014/12/25 01:07:02__fetch() なら while ループかな
foreach と while をどのように使い分けるかという質問と同義かもしれませんねぇ...「お好きなものをお使いください」という感じになってしまうと思います。
query() の返す結果セットをそのまま使うのと、fetch() あるいは fetchAll() を使うのとは機能面でいうと、指定できるフェッチスタイルが少々違うので、その辺りを意識する必要があるかどうかだと思います。
デフォルトのフェッチスタイルを変更しておくのなら、増々差が無いと思います。
__やっぱりお好きな方をという事に...
fetchAll() で受け取ってから foreach で回すのは配列に移し替えるコストがもったいないという人もいる様ですが、巨大なものでなければ大差はない様に思います。
大変勉強になりました、ご回答ありがとうございました!
2014/12/25 19:16:57