分からないこと:簡易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" }
回答1件
あなたの回答
tips
プレビュー