🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

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

PHP

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

Q&A

解決済

1回答

2092閲覧

MySQLの1レコードずつを変数に代入し、PHPで全件抽出

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

PHP

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

0グッド

0クリップ

投稿2020/01/02 20:16

前提・実現したいこと

PHPでMySQLに保存したレコードを全件抽出するシステムを作っています。
今回の場合、カラムにはid, name, email, contentの4つがあるのですが、全件抽出する際に、1つのレコードずつ変数に代入したいです。

というのも、下記コードにて実行した際に実行結果(=画像=)の様になってしまっているので、スタイリングしやすい様に変数に入れる方法をご教示ください。

イメージ説明

該当のソースコード

php

1try { 2 $db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD); 3 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 4 5 6 $stmt = $db->query("select * from formtable"); 7 $users = $stmt->fetchAll(PDO::FETCH_ASSOC); 8 foreach ($users as $user) { 9 var_dump($user); 10 } 11 echo $stmt->rowCount() . " records found."; 12 13} catch (PDOException $e) { 14 echo $e->getMessage(); 15 exit; 16 17} 18

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

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

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

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

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

m.ts10806

2020/01/02 22:56 編集

どういう風に「スタイリング」したいのでしょうか。 それによって適切なやり方が異なるように思います。 ご存知かとは思いますが、やりたいこと=適切な(または好ましい) 手段とは限りません。 あと本件とは関係ないですが、rowCount()はSELECT”以外”で「作用した件数を正しく」を返すので https://www.php.net/manual/ja/pdostatement.rowcount.php 「検索でヒットした件数」を得たい場合はSQLでcount(カラム名または*)を実行して件数のみ取得するのが定石です。
退会済みユーザー

退会済みユーザー

2020/01/02 23:10

>どういう風に「スタイリング」したいのでしょうか。 下記サイトの様に、テーブルで表示したいと思っています。 https://codepen.io/zavoloklom/pen/IGkDz >「検索でヒットした件数」を得たい場合はSQLでcount(カラム名または*)を実行して件数のみ取得するのが定石です。 ご指摘ありがとうございます。抽出したレコード数を表示したくコードを書いたのですが、 >直近の SQL ステートメントによって作用した行数を返すと表記されていました。修正いたします。
guest

回答1

0

ベストアンサー

単純に「レコード毎に別の変数」なら可変変数を使えば良いですが、「何件あるのか」「何件に対して」「どのレコードに対して」の処理をするかというところまで制御するのは今回のケースでは難しい(やったとして悪手にしかならない)と思います。
「スタイリングしやすい」では質問者自身しか「どうしたいのか」を知らない現状があるのでそれ次第でやり方を考えるべきかと思いますが、
通常はfetchAll()の結果をそのまま使って表示します。
「データによってどうかしたい」のであれば表示のループ時に個々に分岐させて加工するか、可能な範囲でSQLで加工したデータを取得してPHP側では表示だけに注力します。

つまり要件次第

下記サイトの様に、テーブルで表示したいと思っています。

fetchAll()の結果をforeachで回してテーブル作れば良いです。
1つ1つ変数に入れるとか逆に情報の扱いを煩雑にしています。

もちろん、PHPで組む前にモックでhtml組んでから。
デザイン・レイアウトはあくまでフロントエンド側の都合です。
なので、PHPが出力したHTMLに対してCSSあてていくか(HTMLもそういうHTMLを出していくか)
先にHTML,CSSでレイアウト作っておいて、そのHTMLを出すようにPHPを組んでいくかどちらかです。
PHP側が持つ責任はありません。

投稿2020/01/02 23:01

編集2020/01/02 23:29
m.ts10806

総合スコア80875

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

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

退会済みユーザー

退会済みユーザー

2020/01/02 23:28 編集

>通常はfetchAll()の結果をそのまま使って表示します。 なるほど。了解です。 >1つ1つ変数に入れるとか逆に情報の扱いを煩雑にしています。 データが増える事につれてその数変数に入れる訳ですから、今考えてみると、すごい量となることを実感できました。 参考サイトとして、PHPマニュアルのURLを提示してもらったので、 本件とは異なるのですが、m.ts10806さんはPHPマニュアルを読んで勉強されていたのですか? というのもPHP7技術者認定初級試験まだ初級ですけど。受験しようかと思っています。下記リンクより、教材となりそうな本なのですが、実際PHPマニュアルで事足りるのでしょうか?以前紹介してもらったリーダブルコードと一緒に読もうかと思っています。 https://www.amazon.co.jp/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AEPHP5-%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88-David-Sklar/dp/4873115809/ref=sr_1_1?ie=UTF8&qid=1347606924&sr=8-1
m.ts10806

2020/01/02 23:39

7ならこっちが公認テキストです。「PHP7対応」の帯があります。 https://www.oreilly.co.jp/books/9784873117935/ (認定機構側のリンクが古いままですね) 私はPHP自体実務で出会ったのでほぼ実務で独学で覚えました。 書籍はあまり使ってません。 「何をしたいか」から必要な道具や素材、部品を作るべくPHPマニュアルやネットのコードを漁って組み立てていく作業。今とほとんど変わらないですね。 あとは「ショッピングサイトを作りたい」となったときに既存のサイトを使ってみて裏方の動きを想像してそれを実装してみる。今もこれは変わってません。 実務は試験とは違うので、別に全て覚える必要はなく「こういう機能があった」という引き出しをもっておいて逐一引き出しをあけてPHPマニュアルで仕様を確認すれば良いのです。 私も去年初級受験しましたが、まぁ、公認テキスト+PHPマニュアルで事足りるようには思いました。 中には問題と答えが間違ってるものがあったりするので、満点は難しそうですけど ( 例: https://qiita.com/rana_kualu/items/130fab56656c3e450d61 ) 合格点の70%は1ヶ月くらいきちんと学習すれば可能かとは思います。
退会済みユーザー

退会済みユーザー

2020/01/02 23:56 編集

ありがとうございます。あやうく7対応ではないものを購入するところでした。 >あとは「ショッピングサイトを作りたい」となったときに既存のサイトを使ってみて裏方の動きを想像してそれを実装してみる。今もこれは変わってません。 既存のサイトというのは、職場が運営しているものでしょうか?インターンするなども考えているので、実務として行いたいと思っています。 インターンで実務として行えることやインターンで行う事はわからないのですが。。 >中には問題と答えが間違ってるものがあったりするので、満点は難しそうですけど 記事を拝見しました。理解しているのであれば記事を投稿された方は5問しか間違われてないのですね。。一ヶ月集中して臨みたいと思います。 本年も何卒よろしくお願いします。
m.ts10806

2020/01/02 23:56

>既存のサイトというのは、職場が運営しているものでしょうか? いえ、こういうときの「既存のサイト」というのはあくまで「大手サイト」です。 ショッピングサイトならamazon ポータルサイトなら○○ SNSなら○○ 要は誰もが知る大手サイトというのは現時点での最先端で最新鋭であると言えるので。 自社運営サイトがあったとしても、どこかしら大手を参考にしているものです。
退会済みユーザー

退会済みユーザー

2020/01/03 00:06

裏方の動きを想像できているのと、できていないのでは全然違うと思います。私も是非理解する程度に行なってみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問