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をどの様に使いわけているのでしょうか?

回答の条件
  • 1人50回まで
  • 登録:
  • 終了:2014/12/25 19:16:25
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:tezcello No.1

回答回数460ベストアンサー獲得回数69

ポイント100pt

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

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



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

id:tezcello

foreach での使用が前提なら fetch() ではなく fetchAll() ですね。
__fetch() なら while ループかな
foreach と while をどのように使い分けるかという質問と同義かもしれませんねぇ...「お好きなものをお使いください」という感じになってしまうと思います。


query() の返す結果セットをそのまま使うのと、fetch() あるいは fetchAll() を使うのとは機能面でいうと、指定できるフェッチスタイルが少々違うので、その辺りを意識する必要があるかどうかだと思います。
デフォルトのフェッチスタイルを変更しておくのなら、増々差が無いと思います。
__やっぱりお好きな方をという事に...

fetchAll() で受け取ってから foreach で回すのは配列に移し替えるコストがもったいないという人もいる様ですが、巨大なものでなければ大差はない様に思います。

2014/12/25 01:07:02
id:situmon2014

大変勉強になりました、ご回答ありがとうございました!

2014/12/25 19:16:57

その他の回答0件)

id:tezcello No.1

回答回数460ベストアンサー獲得回数69ここでベストアンサー

ポイント100pt

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

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



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

id:tezcello

foreach での使用が前提なら fetch() ではなく fetchAll() ですね。
__fetch() なら while ループかな
foreach と while をどのように使い分けるかという質問と同義かもしれませんねぇ...「お好きなものをお使いください」という感じになってしまうと思います。


query() の返す結果セットをそのまま使うのと、fetch() あるいは fetchAll() を使うのとは機能面でいうと、指定できるフェッチスタイルが少々違うので、その辺りを意識する必要があるかどうかだと思います。
デフォルトのフェッチスタイルを変更しておくのなら、増々差が無いと思います。
__やっぱりお好きな方をという事に...

fetchAll() で受け取ってから foreach で回すのは配列に移し替えるコストがもったいないという人もいる様ですが、巨大なものでなければ大差はない様に思います。

2014/12/25 01:07:02
id:situmon2014

大変勉強になりました、ご回答ありがとうございました!

2014/12/25 19:16:57
id:situmon2014

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

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

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

  • id:rouge_2008
    私は経験がないので分からない為、質問内容の確認だけになりますが・・・

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

    ※「PDOStatement::fetchAll」という選択肢もあると思います。

    ・PHP: PDOStatement::fetchAll - Manual
    http://php.net/manual/ja/pdostatement.fetchall.php

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません