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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

3回答

2959閲覧

PHP データベースに接続で疑問な箇所があります

marimokomokmOk

総合スコア52

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2017/03/08 04:13

$sql = $pdo->prepare ( 'select * from customer where login=? and password=?' );
についてですが、
なぜ$sqlに代入しているのでしょうか。
PDOのインスタンスを代入した$pdoを$sqlに代入して、
PDOのインスタンスが持つfetchAllメソッドを実行するためでしょうか。

php

1<?php 2session_start (); 3// unset→指定した変数を破棄する 4unset ( $_SESSION ['customer'] ); 5$pdo = new PDO ( 'mysql:host=localhost;dbname=takahashi1;charset=utf8', 'takahashi', 'takahashi' ); 6$sql = $pdo->prepare ( 'select * from customer where login=? and password=?' ); 7$sql->execute ( array ( 8 $_POST ['login'], 9 $_POST ['password'] 10) ); 11// foreachは配列とオブジェクトをループして使うための構文 12// 配列ではないが使いやすくするために特別にforeachの反復処理で使えるように作られている 13// $rowという変数に入れる 14foreach ( $sql->fetchAll () as $row ) { 15// 連想配列$_SESSION['customer']にキーを指定して追加し、値として連想配列を代入 16 $_SESSION ['customer'] = array ( 17//idというキーで$row['id']を入れる 18 'id' => $row ['id'], 19 'name' => $row ['name'], 20 'address' => $row ['address'], 21 'login' => $row ['login'], 22 'password' => $row ['password'] 23 ); 24} 25if (isset ( $_SESSION ['customer'] )) { 26 echo 'いらっしゃいませ、', $_SESSION ['customer'] ['name'], 'さん。'; 27} else { 28 echo 'ログイン名またはパスワードが違います。'; 29} 30?>

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

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

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

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

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

guest

回答3

0

PDO::prepare
http://php.net/manual/ja/pdo.prepare.php

イメージ説明

prepare メソッドが返すのは PDOStatement オブジェクトです。
なので、提示されたコードで、代入している変数名がイケテナイ…

リファレンスページの例にあるように、PDOStatementであることがわかるよう、$stmt のように変数名を決定すべき。
$sql なんて変数名にしているから、無駄な混乱を招いているんでしょうね。

投稿2017/03/08 04:23

編集2017/03/08 04:43
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

marimokomokmOk

2017/03/08 04:42

ありがとうございます 今後名前を$stmtにします!
marimokomokmOk

2017/03/08 04:45

PDO::prepare の ::の意味って何でしょうか
退会済みユーザー

退会済みユーザー

2017/03/08 04:47

マニュアルの中では、「クラス::メソッド」 の関係を表す記号として使われています。 ソースコードの中で現れたときは、クラス::メソッド の関係において、静的メソッドであるという意味になります。
marimokomokmOk

2017/03/08 05:57

PHPマニュアルのみどり色ってなにか意味があるのでしょうか。 [PHPマニュアル](http://php.net/manual/ja/class.pdo.php) PDO { public __construct ( string $dsn [, string $username [, string $password [, array $options ]]] ) public PDOStatement prepare ( string $statement [, array $driver_options = array() ] ) public PDOStatement query ( string $statement ) } のPDOStatementがみどりいろになっています。
退会済みユーザー

退会済みユーザー

2017/03/08 05:59

緑色って「color: #369;」の文字のところもこと?
marimokomokmOk

2017/03/08 06:21

ありがとうございます。 あとでよみます><
退会済みユーザー

退会済みユーザー

2017/03/08 06:22

今あなたが色々な回答者にしている質問の回答が、リンク先にある。先に読んでください。
marimokomokmOk

2017/03/08 06:25

承知しました 今クリックします 25歳でこのレベルってまずいでしょうか。。
退会済みユーザー

退会済みユーザー

2017/03/08 06:26

年齢じゃなくて経験年数の問題でしょ。
退会済みユーザー

退会済みユーザー

2017/03/08 06:35 編集

経験年数1年なら、焦るほどではないと思う。決して早くはないと思うが。 ただ、プログラミングの習得過程において、学習への取り組み方というか、アプローチがズレていると思う。今ここで、マニュアルの読み方を覚えるかどうかで、今後の学習スピードが大きく変わる岐路にあるように思います。 これまでの質問回答のやり取りを見る限りでは、取り組み方を変えない限り、進歩は見込めない。
marimokomokmOk

2017/03/08 08:05

ありがとうございます。 取り組み方をかえるべきなんですね。 大変です><
退会済みユーザー

退会済みユーザー

2017/03/08 08:14

そう言われて、「どのように取り組むべきか」を質問しないところが、やっぱりズレていると感じます。
guest

0

メソッドが返すモノの性質が異なる為です。
$pdoは、PDOクラスを使ってDBにアクセスする準備が出来たというもの
$sqlは、SQL文を実行する準備が出来たというもの
$sqlはPDOクラスのインスタンスではなく、PDOStatementクラスのインスタンスです。
別のクラスのインスタンスなので、当然格納する変数は別にするのが普通ですよね。
PDO::prepare

投稿2017/03/08 04:20

kunai

総合スコア5405

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

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

marimokomokmOk

2017/03/08 04:25

ご解答下さりありがとうございます PDOクラスとPDOStatementクラスの違いは何ですか。 PDOStatementクラスは、PDOクラスの中にあるクラスがPDOStatementクラスでしょうか
kunai

2017/03/08 04:28

すみません、質問の意味が分かりません。 「PDOクラスの中にあるクラス」と言うのは、PDOクラスのメンバとしてPDOStatementが存在するのか、という意図ですか?
marimokomokmOk

2017/03/08 04:30

すみません PDOクラスの中にPDOStatementがあるのでしょうか
kunai

2017/03/08 05:49 編集

PDOクラスのメンバとしてPDOStatementがあるのか、という問いでよければ、答えはYesです。 (追記:この記述は誤りでした。が、会話の流れとして一応残しておきます。答えはNoが正解です) が、今回の元の質問を考えると、そこは正直どうでもいい事です。 PDOクラスは、あくまでDBへの接続やトランザクションを管理するクラスであり、SQL文の実行に関してはPDOStatementが担当します。 その為、仮にprepareせずに直接SQLをぶっこむPDO::query()メソッドを実行したとしても、結果セットはPDOStatementのインスタンスとして返ります。 SQLを実行する事や、その結果を取得する事等を担当するのはPDOStatementの為、返答されるインスタンスはPDOStatementとなるわけです。
marimokomokmOk

2017/03/08 05:29

ご返信下さりありがとうございます。 PDOクラスのインスタンスである変数$pdoで、PDOクラスのprepareメソッドを$sqlに代入しているということでしょうか。
kunai

2017/03/08 05:31

メソッドを代入しているのではなく、メソッドの返り値として得られたPDOStatementのインスタンスを格納しているわけです。
marimokomokmOk

2017/03/08 05:33

PDO { public __construct ( string $dsn [, string $username [, string $password [, array $options ]]] ) public PDOStatement prepare ( string $statement [, array $driver_options = array() ] ) public PDOStatement query ( string $statement ) }
KiyoshiMotoki

2017/03/08 05:55 編集

横から失礼します。 > PDOクラスのメンバとしてPDOStatementがあるのか、という問いでよければ、答えはYesです。 これは誤りです。 PDOクラスは PDO::query()メソッドや PDO::prepare()メソッドの戻り値として PDOStatementクラスのインスタンスを返却しますが、 それをプロパティとして保持しているわけではありません。 PHPのマニュアルから、PDO クラスは一切のプロパティ(メンバのこと)を持っていないことが分かりますし、 http://php.net/manual/ja/class.pdo.php var_dump() の結果も、それを示しています。 ■ソースコード  $db = new PDO("mysql:host=XXXXX;dbname=test", 'XXXXX', 'XXXXX');  var_dump($db);  $stmt = $db->prepare('select * from test');  var_dump($db); ■実行結果  object(PDO)#1 (0) {  }  object(PDO)#1 (0) {  }
marimokomokmOk

2017/03/08 05:39

プロパティ=クラスのメンバ変数
kunai

2017/03/08 05:48

>KiyoshiMotokiさん 失礼しました。ホントですね。 PHPマニュアルのクラス概要のところで列記されているのをパッとみてプロパティと勘違いしておりました。 ご指摘ありがとうございます。
marimokomokmOk

2017/03/08 05:50

public PDOStatement query ( string $statement ) これはqueryメソッドですか。 PDOStatementはなんですか。修飾子でしょうか。
kunai

2017/03/08 05:52

PDOStatement型の返り値を持つ、queryというメソッドです。 引数はstring型の$statementという変数に格納されます。
marimokomokmOk

2017/03/08 06:20

ありがとうございます。 とても勉強になります。 PDOStatement型なんてあるんでしょうか。 型はint,object,float,stringなどの一般的な型しか認知しておりません。 PDOStatement型がわからないです。
kunai

2017/03/08 06:30

型=クラスと認識していただいて結構です。 このあたりに話については、さすがにドキュメント等基礎情報をご確認ください。 元の質問意図と乖離が大きくなっているように思いますので、同様の追加質問についてはお答えできかねる事をご理解下さい。 http://php.net/manual/ja/language.oop5.basic.php
guest

0

executeするまえにprepare処理を指定するためでしょうね
こまかくパタメータをbindする際の設定などできるので

投稿2017/03/08 04:23

yambejp

総合スコア114740

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

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

yambejp

2017/03/08 04:52

SQL文をprepareでPDOステートメントとして変数に入れておかないと bindPramしてからexecuteできないでしょ? その辺が理解できていないなら、基本から学習すべきです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問