初めに
- PHP/Mysqlを使用して1年ほど
- Symfony:ORM(doctorin)やLaravelを半年ずつほど
概要
①では使い分けの基準を投稿いたしました。
②では「query」の処理内容にフォーカス当てて記載いたします。
1. queryについて
まずは静的なSQL文に使用する「query」について調べてみました。
PHPドキュメントでは以下のように記載があります。
PDO::query() は、一回の関数コールの中で SQL ステートメントを準備して実行し、 結果を PDOStatement オブジェクトとして返します。
※PDOStatement オブジェクトについて
要するにSQLは実行されるが、戻り値が PDOStatement なので値は取り出せていない状態です。(雑ですみません…)
値を取り出すには PDOStatement クラスで用意されている「fetch」や「fetchAll」を使います。
2. fetch/fetchAll について
「fetch」「fetchAll」についてざっくり解説
「query」などで取得したPDOStatement を使用してSQL結果を取得する際に使用します。
① fetch() : データを一行返す
② fetchAll : データを全て配列で返す
実際の記述例を下記に記載します。
$sql = 'select * from test where id = 1';
$Statement = $pdo->query($sql); //$sqlに格納したSQL文が実行される
$return = $Statement->fetch(); //$StatementからSQL文の結果を1レコード取得する
$return2 = $Statement->fetchAll(); //$StatementからSQL文の結果を全て取得する
まとめ
- 「query」の戻り値はPDOStatement となるため値(データ)が直接取得できるわけではない。
- PDOStatement から値を取得するには「fetch」や「fetchAll」を使用する。
- 「fetch」はデータを一行、 「fetchAll」はデータを全て配列で返す。
- 使用イメージはこんな感じで考えています、「query」(SQL文実行)→「fetch」OR「fetchAll」(実行データ取得)
- 概要だけでも理解していると違うかも?人に説明ができるまで落とし込みたいです。