質問: 下記のPHPのPDOのプログラムの流れが良く分からないのですが 下の流れで理解は合っていますでしょうか? よろしくお願いします。 1行目:$pdo=new PDO('mysql:host=localhost;dbname=shop;charset=utf8', 'staff', 'password'); 2行目:$sql=$pdo->prepare('select * from product where name=?'); 3行目:$sql->execute([$_REQUEST['keyword']]); 4行目:foreach ($sql as $row) {・・・} 1行目の流れとしてはPDO(・・・)のデータベースを接続するを$pdoに代入した。 2行目は、1行目で渡されたデータベースを接続する命令である$pdoがprepareに働きかけてその()内からデータベースを動かす命令を$sqlに代入した 3行目は、指定されたデータベースから動かす命令を与えられた$sqlはexecuteに働きかけて()内に命令を実行した
回答: まず **オブジェクト指向** を最初に勉強したほうがいいかもしれません、文法的なところから理解が足りないように見えます。以下に説明を書きますが、わからない用語が出てきたら適宜調べてください。 #### 1行目 データベースに関する一連の処理を担う `PDO` オブジェクトを作成する。`PDO` オブジェクトはコンストラクター (`__construct()`)で第1引数~第3引数を使って接続のための情報を受取る。`PDO` オブジェクトは作成されると同時に、引数で渡された情報を使って実際にデータベースへ接続する。この `PDO` オブジェクトは、代入演算子 `=` によって変数 `$pdo` に格納される。 #### 2行目 `PDO` オブジェクトの `prepare()` メソッドが呼ばれる。`prepare()` メソッドは第1引数にプレースホルダ `?`入りの、SQL文のテンプレートとなるものを受け取る。`PDO` は `prepare()` メソッドを実行すると、`PDOStatement` オブジェクトを返す。 `PDOStatement` オブジェクトは、自分を生み出した親の `PDO` に関する情報とSQL文のテンプレート情報を内部的に所持している。この `PDOStatement` オブジェクトは、代入演算子 `=` によって変数 `$sql` に格納される。 #### 3行目 `PDOStatement` オブジェクトの `execute()` メソッドが呼ばれる。`execute()` メソッドは、プレースホルダ `?` に当てはめるための文字列などのパラメータを、第1引数に配列で受け取る。受け取ると同時に、パラメータをプレースホルダ `?` に当てはめ、実際にデータベースと通信してSQLを実行する。そして、`PDOStatement` オブジェクトの内部にSQL実行結果が格納される。 #### 4行目 `PDOStatement` オブジェクトは `Traversable` インタフェースを実装しているため、`foreach` で回したときに通常のオブジェクトとは異なる特別な振る舞いをさせることができる。`PDOStatement` オブジェクトに関しては、結果を1行ずつ配列形式で取り出す動きをするようになっている。取り出される配列1つ1つは、1ループごとに変数 `$row` に格納される。 ちなみにこれは以下の記述と全く同じ意味である。 ``` while (($row = $sql->fetch()) !== false) { } ```