LoginSignup
0
0

【PHP】PDO:「query」と「prepare/bindValue/execute」の使い分け②

Last updated at Posted at 2023-05-22

初めに

  • 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」(実行データ取得)
  • 概要だけでも理解していると違うかも?人に説明ができるまで落とし込みたいです。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0