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

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

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

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

PHP

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

Q&A

解決済

1回答

966閲覧

購入明細画面に日時・合計金額が表示されず、解決策が分からないので教えて頂きたいです。

miikan023

総合スコア3

MySQL

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

PHP

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

0グッド

1クリップ

投稿2021/09/08 08:39

編集2021/09/08 11:57

分からないこと:簡易ECサイトの購入明細ページ上部に、指定された注文番号の「注文番号・日時・合計金額」を表示したいが、表示されない原因が分からない。

言い換えると➡phpMyAdminでmodel内(histories.php)にあるSQL文を実行して、問題がなかったのにもかかわらず、model内(db.php)にあるSQL文実行するユーザー関数(fetch_query())を実行するとfalseが返されてしまう原因が分からず困っています。

してみたこと:var_dump($history), var_dump($statement) をcontroller内のphpファイルで実行した。
結果:両方とも bool(false), NULL しか出ずそれ以上のことが分からなかった。

※PHP、MySQLもまだ苦手意識があり+テラテイルでの質問もまだ3回目です。お手柔らかにコメントして頂けると幸いです。

//-------------histories.php(model) // 注文番号一列の情報取得 function get_one_history($db, $order_id, $user_id){ $sql = " SELECT histories.user_id, histories.created, SUM(details.price * details.amount) AS total FROM histories JOIN details ON histories.order_id = details.order_id WHERE histories.order_id = ? AND histories.user_id = ? "; return fetch_query($db, $sql, [$order_id, $user_id]); }
//-------------db.php(model) function fetch_query($db, $sql, $params = array()){ try{ // SQL実行準備※プリペアドステートメント $statement = $db->prepare($sql); // SQLの実行 $statement->execute($params); // 返り値:配列を一行取得する return $statement->fetch(); }catch(PDOException $e){ // エラーMSG set_error('データ取得に失敗しました。'); } // データ取得不可の場合falseを返す return false; }

該当箇所のview / controllerのコードを以下に記載します。

//-------------detail_view.php(view) <tbody> <tr class="text-center"> <td><?php print($order_id); ?></td> <td><?php print($history['created']); ?></td> <td class="text-danger"><?php print($history['total']); ?</td> </tr> </tbody>
//-------------details.php(controller一部) // データベース接続 $db = get_db_connect(); // ユーザー情報取得 $user = get_login_user($db); // order_id取得 $order_id = get_post('order_id'); // 購入履歴取得 $history = get_one_history($db, $order_id, $user['user_id']);

追記:(1)get_post('order_id')(2)$user['user_id'](3)$e (の一部)の値↓
1.array(4) { ["user_id"]=> int(5) ["name"]=> string(6) "mielle" ["password"]=> string(8) "mikan039" ["type"]=> int(2) }
2.string(1) "2"

3. ["errorInfo"]=> array(3) { [0]=> string(5) "42000" [1]=> int(1140) [2]=> string(178) "In aggregated query without GROUP BY,   expression #1 of SELECT list contains nonaggregated column 'sample.histories.user_id'; this is incompatible with sql_mode=only_full_group_by" }

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

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

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

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

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

YT0014

2021/09/08 09:36

発生している(と思われる)PDOException $eの情報を取得しご提示ください。 また、get_post('order_id')、$user['user_id']の値も取得し、ご提示ください。
miikan023

2021/09/08 09:57

コメントありがとうございます。PDOException $eの情報というのがよく分からなかったため、とりあえずget_post('order_id')、$user['user_id']の値をvar_dump()で取得したものを追記します。
m.ts10806

2021/09/08 10:55 編集

var_dump( $e);
miikan023

2021/09/08 11:59

教えて頂きありがとうございます!表示したところ、どうやらGROUP BYをSQL文に付けていないこと、もしくはhistories.user_idの使用方法に誤りがあるかもしれません。
m.ts10806

2021/09/08 12:24

SQLはアプリケーションからいきなり実行するのではなく 想定のSQLを直にDBで実行して想定の結果を得られてから使うようにすると良いです。
miikan023

2021/09/08 12:34

すいません。違いがあまり分からないのですが、 「想定のSQLを直にDBで実行~」というのは、アプリケーションとして動作させる前に phpMyAdminでSQL実行させて、想定の結果が出てからアプリケーションで実行しよう。という理解でよろしかったでしょうか?
guest

回答1

0

自己解決

原因:グループ分けせずに使用しようとしたこと。

解決策:まずvar_dump($e)でエラー元を特定➡グループ分けをしたことでデータを特定し、
必要であったデータを抽出できた。

// 管理者のための1行情報取得 function get_one_admin_history($db, $order_id){ $sql = " SELECT histories.user_id, histories.created, SUM(details.price * details.amount) AS total FROM histories JOIN details ON histories.order_id = details.order_id WHERE histories.order_id = ?     //グループ分けをした GROUP BY histories.order_id "; return fetch_query($db, $sql, [$order_id]); }

投稿2021/09/08 12:39

miikan023

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問