質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

1710閲覧

PHPのデータベース接続する際のPODの流れが分からない

Ms.yy

総合スコア83

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2019/05/11 11:19

下記の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に働きかけて()内に命令を実行した

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/05/11 11:36

PHPマニュアルで確認すればわかることも多いかと思いますが、そのあたり、どこまで確認されてますか? あと「DBで何をしたいか」で流れも使う機能も変わってきます。 全て提示の流れとは限りません。
Ms.yy

2019/05/11 11:45

現在、PHP本を使い勉強しておりデータベースの基本操作のチャプターで今回の流れが出てきてしまい、ご質問させて頂きました。 今回の例でいいますとデータベースで商品名を検索するといいう流れです。 よろしくお願いいたします。
m.ts10806

2019/05/11 12:13

PHPマニュアルはわかりますか? 大抵どのような書籍にもURLは載っているかと思いますし機能名で検索すればヒットします。
Ms.yy

2019/05/11 12:20

分かりました。 ありがとうございます!
m.ts10806

2019/05/11 12:32

通じてるか不安ではありますが、PDOだけでまとめてありますし、辞書がわりにも使えます。 結果を質問本文に追記してもらえたら、それを見てアドバイスしたいと思ってます。
Ms.yy

2019/05/11 14:55

このマニュアルは深く記載してありそうなので、調べさせて頂きます。 ありがとうございます。
m.ts10806

2019/05/11 15:06

公式のマニュアルなので深くどころかPHPの仕様そのものです。 的確に使えるようになるだけで一気に自己解決できることが増えます。 (逆に使えない人は大抵ずっと初心者です)
guest

回答1

0

ベストアンサー

まず オブジェクト指向 を最初に勉強したほうがいいかもしれません、文法的なところから理解が足りないように見えます。以下に説明を書きますが、わからない用語が出てきたら適宜調べてください。

1行目

データベースに関する一連の処理を担う PDO オブジェクトを作成する。PDO オブジェクトはコンストラクター (__construct())で第1引数~第3引数を使って接続のための情報を受取る。PDO オブジェクトは作成されると同時に、引数で渡された情報を使って実際にデータベースへ接続する。この PDO オブジェクトは、代入演算子 = によって変数 $pdo に格納される。

2行目

PDO オブジェクトの prepare() メソッドが呼ばれる。prepare() メソッドは第1引数にプレースホルダ ?入りの、SQL文のテンプレートとなるものを受け取る。PDOprepare() メソッドを実行すると、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) { }

投稿2019/05/11 14:00

編集2019/05/11 14:10
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mpyw

2019/05/11 14:13 編集

あと細かい言葉遣いなので本質的にはどうでもいいですが、PHPのような高級プログラミング言語にはあまり「命令」という言葉は似合わないかもしれません。プログラミング言語の文法レベルの処理は「文」、特定のクラス・オブジェクトに属する処理呼び出しに関しては「メソッド」、いずれにも属さないものに関しては「関数」と呼ぶのが普通です。 【例】 if 文 for 文 foreach 文 echo 文 PDO クラスの prepare メソッド PDOStatement クラスの execute メソッド PDOStatement クラスの fetch メソッド htmlspecialchars 関数 strpos 関数 str_replace 関数 in_array 関数 preg_match 関数
Ms.yy

2019/05/15 13:48

mpyw様ご指摘ありがとうございます。 これからはエンジニアの方にわかりやすく伝えるため言い方も考えてご質問させて頂きたいと思います。
Ms.yy

2019/05/15 13:52

教本などでは理解が難しい点がありますのでPHPマニュアルなどを駆使して上記の文法などもう少し調べていきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問