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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

データベース

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

Q&A

解決済

2回答

961閲覧

[PHP,PDO,mySQL]ステートメントのフェッチ方法について

Zoohomi

総合スコア26

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

データベース

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

0グッド

0クリップ

投稿2017/12/24 02:13

編集2017/12/24 02:16

とあるサイトのサンプルコードを見ていて、気になった記述がありましたので質問させて頂きます。

【疑問点があるコード】

php

1session_regenerate_id(true); 2 3// 入力したIDのユーザー名を取得 4$id = $row['id']; 5$sql = "SELECT * FROM userData WHERE id = $id"; //入力したIDからユーザー名を取得 6$stmt = $pdo->query($sql); 7foreach ($stmt as $row) { 8 $row['name']; // ユーザー名  ★ここ 9} 10$_SESSION["NAME"] = $row['name']; 11header("Location: Main.php"); // メイン画面へ遷移 12exit(); // 処理終了

上記のコードの「★ここ」の部分ですが、この記述は必要あるのでしょうか?

上記コードの目的としては、id(主キー)を基にレコードを取得し、ユーザー名を取得するものですが、以下が不明です。

・idは主キーなので1件しか返ってきませんが、ループさせる必要はあるのでしょうか?
・このforeachって、回すだけで$rowには各列の値が入ってくれるのでしょうか?
「★ここ」で$row['name']を呼び出しているのはなぜでしょうか?
・feachで回すループ「while( $row = $stmt->fetch(PDO::FETCH_ASSOC) ){ 」で1行ずつ$rowを別の変数に追加していくのと同じ処理というイメージで良いのでしょうか?

初歩的な質問で申し訳ございませんが、どなたかご解説ください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

・idは主キーなので1件しか返ってきませんが、ループさせる必要はあるのでしょうか?

1件しか無いはずならばループさせる必要はないですが、まあテンプレみたいな感じとしてループで取ってきてるのかと

・feachで回すループ「while( $row = $stmt->fetch(PDO::FETCH_ASSOC) ){ 」で1行ずつ$rowを別の変数に追加していくのと同じ処理というイメージで良いのでしょうか?

PDOStatementはTraversableインターフェイスを実装してますのでforeachを利用することができます
http://php.net/manual/ja/class.pdostatement.php
http://php.net/manual/ja/class.traversable.php
なので、データを取る意味では同じです(ただしforeachで取ってくる場合はPDO::FETCH_ASSOCなのかPDO::FETCH_BOTHなのかはPHPのpdostatement実装次第・・・多分PDO::FETCH_BOTHの形式かな)

「★ここ」で$row['name']を呼び出しているのはなぜでしょうか?

多分意味はない・・・こうやってデータとれますよって言うためにサンプルとして書いてるだけの気がしますね。

※全体のソースかどうかわからないのでなんとも言えませんが

PHP

1$_SESSION["NAME"] = $row['name'];

データがないときはエラーになりそうな気がする(存在しないエラー)

投稿2017/12/24 02:52

rururu3

総合スコア5545

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

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

Zoohomi

2018/01/02 07:44

大変ご丁寧なご解説ありがとうございます。 おかげ様ですっきり致しました。 やはり汎用的なコードを見ると、一つ一つきになって仕方ありません・・。
guest

0

どちらのサイトのどのような意図のコードか分かりませんが、DB から特定の id をもつデータを取得する目的のサンプルコードだとすると、このコードは完成形ではないはずなので、コードの中身に関して疑問を持ってもあまり意味はないです。

prepare を使用した、もっと適切なサンプルはいろいろあるので、他を探したほうが良いです。

読み物:(prepare 関係ないですw PDO の fetch_style が面白いって話)
PDOフェッチパターン大全

投稿2017/12/24 02:41

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問