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

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

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

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

PHP

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

Q&A

5回答

4513閲覧

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/09 06:22

prepare
PDO::prepare — 文を実行する準備を行い、文オブジェクトを返す

ここに書いてある文オブジェクトって何ですか?

$stmtをvar_dumpやったら
object(PDOStatement)#2 (1) { ["queryString"]=> string(51) "select * from customer where login=? and password=?" }
でした。
この中に文オブジェクトがあるのでしょうか。
どれですか。

オブジェクトとはインスタンスですよね。

php

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

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

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

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

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

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

guest

回答5

0

文オブジェクトというのは PHP の用語ではなく PDO の用語です。ですからここで文と言うのは SQL を差します。

SQL は単なる文字列ですから、文字列のメソッドとプロパティしか持ちません。これを PDO で扱いやすくするためにラッピングしたのが文オブジェクトです。

例えば、あるアプリで犬の情報を扱うとします。そのためには犬クラスを作るのが便利です。犬クラスには品種や名前や体重などのプロパティを実装します。そうして作ったクラスをインスタンス化したものが犬オブジェクトです。

また別のあるアプリでは、やはり犬の情報を扱います。このアプリでもやはり犬クラスを作り、金額や寿命、仕入先などのプロパティを実装します。

この犬クラスと、先ほどのアプリの犬クラスは、名前は同じ犬クラスですが、全くの別物です。

クラス名も、Dog かもしれないし、SHDog かもしれないし、PDODog かもしれません。しかし正確なクラス名は様々であっても、みな犬クラスと呼ぶことができます。

ここで言う文オブジェクトとは、その程度の意味です。クラスの正式名称は PDOStatement です。

投稿2017/03/10 07:33

Zuishin

総合スコア28662

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

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

marimokomokmOk

2017/03/13 04:53

ご解答下さりありがとうございます。 文オブジェクトはPDOの用語なんですね。 初めて知りました。PHP用語だと勘違いしてました。 難しいのでもう少しじっくりZuishinさんの回答を読んでみます。
guest

0

PHP: PDOStatement - Manual
に従った構造でデータを納めていることが、var_dump()で確認できていますね。
オブジェクトの外からアクセスできるプロパティがqueryStringしかないので、
そのような表示になります。

気になるようであれば、継承クラスを定義して、
privateデータも見てみるといいかもしれません。

投稿2017/03/09 07:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

marimokomokmOk

2017/03/10 01:32

ありがとうございます。 PDOStatementにqueryStringというプロパティがあることをはじめてしりました。 queryStringにselect * from product where name=?が格納されているんですね。 var_dumpでqueryStringをみたいです。
marimokomokmOk

2017/03/10 01:35

継承クラスを定義? 例えばどんな感じですか? privateデータみたいです!
guest

0

ソースコードでは$stmtが文オブジェクトですね。
PDOStatementクラスのインスタンスです。

投稿2017/03/09 06:31

Clor

総合スコア883

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

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

marimokomokmOk

2017/03/09 08:28

ご解答いただきありがとうございます $stmtが文オブジェクトってことは select * from customer where login=? and password=?が文オブジェクトですか?
Clor

2017/03/09 08:44

いいえ PDOStatementクラスのインスタンスである$stmtが文オブジェクトとなります。 文オブジェクトである$stmtの、queryStringというプロパティにSQL文(select * ~)が格納されています。
marimokomokmOk

2017/03/09 09:22

PDOStatementクラスにqueryStringというプロパティ(クラスに属する変数)があることを初めて知りました! クエリ文字列は select * from customer where login=? and password=? で queryStringにselect * from customer where login=? and password=? が入ってるんですね!
guest

0

単純な日本語訳では「文」となって分かりにくいですが、英語文は下記の通り
PDO::prepare — Prepares a statement for execution and returns a statement objectとなっていますね。参考
なので、そのままステートメントを返す、という定義で理解して良いのではないでしょうか。

投稿2017/03/09 06:28

編集2017/03/09 06:29
motuo

総合スコア3027

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

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

marimokomokmOk

2017/03/09 08:41

ご解答下さりありがとうございます そのままステートメントを返す ということはそのままのステートメントは 'select * from customer where login=? and password=?' ですか? 文オブジェクトは'select * from customer where login=? and password=?'ですか?
guest

0

$stmtがドキュメントでいうところの文オブジェクト(PDOStatement型)にあたります。

投稿2017/03/09 06:28

編集2017/03/09 06:28
turbgraphics200

総合スコア4269

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

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

marimokomokmOk

2017/03/09 08:45

ご解答下さりありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問