
参考にしているサイト: ドットインストール
ドットインストールをベースに行なっています。
前回の質問より、1レコードずつ変数に格納するのではなく、fetchAll
の結果をforeach
でループするという事がわかったので、実行してみたのですが実行結果が、以下の様になりました。
###実行結果
(Array)(Array)(Array)(Array)
###コード
php
1try { 2 // connect 3 $db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD); 4 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 5 6 // select all 7 $stmt = $db->query("select * from formtable"); 8 $users = $stmt->fetchAll(PDO::FETCH_ASSOC); 9 foreach ($users as $key) : 10 echo "($key) $value"; 11 endforeach; 12 13} catch (PDOException $e) { 14 echo $e->getMessage(); 15 exit; 16 17} 18 19 20?>
###行なった事
PDO::FETCH_ASSOC
というデータ形式に指定してみたのですが、変化がなかった為、変更しませんでした。
データ形式に問題があるのでは?と思い調べてみたのですが、質問点にも書いた様に、あまり載っていなかったです。
##質問点
- なぜ、arrayと表示されているか又、どうすれば良いのか
- 引っ張ってくるときにどういうデータ形式で引っ張ってくるかを指定することができかを現在は
PDO::FETCH_ASSOC
としているが、他のデータ形式にするさいのコード(PHPマニュアルで配列などで探したのですが、私の調べる限り出てきませんでしたので、一覧などがあるページ等を提示してくださると幸いです。) - 上記のデータの型のほかのモード(?)として
PDO::FETCH_CLASS
というものがあると知りました。以下の様にPDO::FETCH_CLASS
の説明をしていたのですが、いまいち分かりません。クラスに直接セットできるメリットは何なのでしょうか?
これを使うと抽出したデータを自分が指定したクラスに直接セットできる
参考元: ドットインストール
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答3件
0
なぜ、arrayと表示されているか又、どうすれば良いのか
別の方の回答にもあるように結果セットを、配列として取得しているからです。
引っ張ってくるときにどういうデータ形式で引っ張ってくるかを指定することができかを現在はPDO::FETCH_ASSOCとしているが、他のデータ形式にするさいのコード(PHPマニュアルで配列などで探したのですが、私の調べる限り出てきませんでしたので、一覧などがあるページ等を提示してくださると幸いです。)
マニュアルでも良いですが、サンプルを多く扱っている以下の記事は一読しておくと良いです。
上記のデータの型のほかのモード(?)としてPDO::FETCH_CLASSというものがあると知りました。以下の様にPDO::FETCH_CLASSの説明をしていたのですが、いまいち分かりません。クラスに直接セットできるメリットは何なのでしょうか?
メリットはリンク先の更にリンク先で説明していますが、そもそも class を使用するようなプログラムを書いていないと理解できないと思います。
投稿2020/01/04 12:39

退会済みユーザー
総合スコア0
0
ドットインストールとか教材に頼るよりも先に、
PHPの公式ドキュメント類の方を読み込んで、サンプルコードの意味を理解して、
関数やメソッドの入力や出力に(思い込みを排除して)注目すれば、
さほどズレたコードは書かない気がするのですが。
例えば、こんな感じとか。(机上のみで、動かしてないけど)
php
1<?php 2try { 3 // connect 4 $db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD); 5 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 6 7 // select all 8 $stmt = $db->query("select * from formtable"); 9 $users = $stmt->fetchAll(PDO::FETCH_ASSOC); 10 foreach ($users as $row) : 11 foreach ($row as $key => $value) : 12 echo "($key) $value"; 13 endforeach; 14 echo "------"; // レコードの区切りをわかりやすく 15 endforeach; 16 17} catch (PDOException $e) { 18 echo $e->getMessage(); 19 exit; 20 21} 22 23
投稿2020/01/04 01:10
編集2020/01/04 02:59
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。


0
ベストアンサー
なぜ、arrayと表示されているか
配列だからです。
PHPマニュアルを確認してください。
サンプルコードに結果が載っています。
例1
Array ( [0] => Array ( [name] => apple [0] => apple [colour] => red [1] => red ) [1] => Array ( [name] => pear [0] => pear [colour] => green [1] => green )
上記を例にすると
foreach ($users as $key)
の$keyが持っているのは2段目のArrayです。
2段目のArrayをそのまま出力しようとしているのでArray
が出ます。
もちろん
$key['name']
のように存在するキーを指定すればちゃんと出力されます。
ついでに突っ込んでおくと$valueと書かれてますがどこにも定義されてないので何も出ません。
変数未定義のNoticeは出るはずですが、エラー表示ONにしてないみたいですね。
引っ張ってくるときにどういうデータ形式で引っ張ってくるかを
むしろPDO::FETCH_ASSOCをどこから引っ張ってきたのでしょうか。
PDOStatement::fetchAllも利用できるfetch_style
は記載されていますし、そこの一番目にリンクのあるPDOStatement::fetchにもfetch_style
並んでいますね。
「私の調べる限り出てきませんで」と仰いますが、割とストレートに記載されているので、どのような探し方をしたのか、確認したページなど提示してもらえませんか?
PDOStatement::fetchAllを見れば必ず目につくはずです。
見落とすほうが難しいと個人的には思います。
上記のデータの型のほかのモード(?)としてPDO::FETCH_CLASSというものがあると
「これを使うと抽出したデータを自分が指定したクラスに直接セットできる 」の出典はどこでしょうか。
PHPマニュアルには下記のようにあります。
PDO::FETCH_CLASS: ここで指定したクラスのインスタンスを返します。各行のカラムがクラスのプロパティ名にマッピングされます。
そして例4 各結果用のクラスのインスタンス作成
サンプルコードとその出力結果もありますね。
ご自身でも試してみましたか?
そのまま「PDO::FETCH_CLASS メリット」で検索してもしっかり解説している記事も出てくるように思います。
まずは自身で試して、使い方を想像しつつ、解説している記事を読むと良いでしょう。
投稿2020/01/03 20:11
編集2020/01/03 20:12総合スコア80888
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2020/01/03 20:24

退会済みユーザー
2020/01/03 21:32

退会済みユーザー
2020/01/03 22:01

退会済みユーザー
2020/01/03 22:14

退会済みユーザー
2020/01/03 22:32

退会済みユーザー
2020/01/03 22:42 編集

退会済みユーザー
2020/01/03 23:22

退会済みユーザー
2020/01/04 08:26

退会済みユーザー
2020/01/04 18:41

退会済みユーザー
2020/01/04 23:56 編集

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/01/04 18:34