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

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

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

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

3400閲覧

MAMPでデータベースにアクセスできない。

z1167474

総合スコア14

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2016/12/08 14:56

詳細PHP7+MySQLという本のchapter13-2について、知恵をお借りしたいです。
MAMPを使い、phpMyAdminで作ったデータベースのテーブルをphpで表示することができません。

結果として、このように表示しています。

イメージ説明

ソースコードはこれです。

php

1<?php 2//require_once("../../lib/util.php"); 3// データベースユーザ 4$user = 'testuser'; 5$password = 'pw4testuser'; 6// 利用するデータベース 7$dbName = 'testdb'; 8// MySQLサーバ 9$host = 'localhost:8809'; 10// MySQLのDSN文字列 11$dsn = "mysql:host={$host};dbname={$dbName};charset=utf8"; 12?> 13 14<!DOCTYPE html> 15<html lang="ja"> 16<head> 17<meta charset="utf-8"> 18<title>レコードを取り出す(すべて)</title> 19<link href="/style.css" rel="stylesheet"> 20<!-- テーブル用のスタイルシート --> 21<link href="../../css/tablestyle.css" rel="stylesheet"> 22</head> 23<body> 24<div> 25 <?php 26 //MySQLデータベースに接続する 27 try { 28 $pdo = new PDO($dsn, $user, $password); 29 // プリペアドステートメントのエミュレーションを無効にする 30 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 31 // 例外がスローされる設定にする 32 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 33 echo "データベース{$dbName}に接続しました。", "<br>"; 34 // SQL文を作る(全レコード) 35 $sql = "SELECT * FROM member"; 36 // プリペアドステートメントを作る 37 $stm = $pdo->prepare($sql); 38 // SQL文を実行する 39 $stm->execute(); 40 // 結果の取得(連想配列で返す) 41 $result = $stm->fetchAll(PDO::FETCH_ASSOC); 42 // テーブルのタイトル行 43 echo "<table>"; 44 echo "<thead><tr>"; 45 echo "<th>", "ID", "</th>"; 46 echo "<th>", "名前", "</th>"; 47 echo "<th>", "年齢", "</th>"; 48 echo "<th>", "性別", "</th>"; 49 echo "</tr></thead>"; 50 // 値を取り出して行に表示する 51 echo "<tbody>"; 52 foreach ($result as $row){ 53 // 1行ずつテーブルに入れる 54 echo "<tr>"; 55 echo "<td>", es($row['id']), "</td>"; 56 echo "<td>", es($row['name']), "</td>"; 57 echo "<td>", es($row['age']), "</td>"; 58 echo "<td>", es($row['sex']), "</td>"; 59 echo "</tr>"; 60 } 61 echo "</tbody>"; 62 echo "</table>"; 63 } catch (Exception $e) { 64 echo '<span class="error">エラーがありました。</span><br>'; 65 echo $e->getMessage(); 66 exit(); 67 } 68 ?> 69</div> 70</body> 71</html> 72

データベースサーバアクセスできるのに、テーブルにはアクセスできません。
エラーを見るに、55行付近のesがダメなのかと思ったのですが、消してもうまくいかないので、完全お手上げ状態です。
どなたか、どこを直せばいいか教えてもらえると幸いです。
最悪、このソースコードがだめでも、ほかの方法でMAMPのデータベースにアクセスする方法をご存知の方がいましたら、教えてください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

先ずはエラーの切り分けから開始しましょう。

本当にテーブルにアクセスできていない(SELECT句実行時エラー)なのでしょうか?

実は別の原因で、動作しない可能性もあるのではないでしょうか。

例えばforeach内のロジックを一旦コメントアウトしてみて下さい。
1.同様のエラーが出るでしょうか?
2.エラーは出るけど別のエラーになるでしょうか?
3.エラーは発生しなくなるでしょうか?

ここで3.だった場合は、
PHP側の実装での不具合となりテーブルにアクセスできないという質問者さんの想定とは外れてきます。

2.の場合は、別のエラーも複合的に発生しているため、さらなる切り分けが必要です。

1.の場合は少なくともその箇所のロジックが現在出ているエラーに関わりがないことが分かります。

このようにプログラミングでは、
まずある程度あたりをつけてみてその箇所を外して動作が変わるかでざっくりとした切り分けをし、
徐々に対象を絞り込みエラー箇所を突き止める、トライアンドエラーのステップが大事となります。

なので先ずはエラーメッセージの通り、es(多分HTML出力時のエスケープ処理?)を利用されている箇所のロジック自体を外してみて状況を確認してみましょう。

投稿2016/12/08 15:19

編集2016/12/08 15:22
Panzer_vor

総合スコア1636

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

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

0

PHP

1 echo "<td>", es($row['id']), "</td>"; 2 echo "<td>", es($row['name']), "</td>"; 3 echo "<td>", es($row['age']), "</td>"; 4 echo "<td>", es($row['sex']), "</td>";

es($row[])って関数をそれぞれ呼び出そうとしてるけど、そんな関数無いですってエラーメッセージですが、
それぞれでes()って何をしようとしているのでしょうか?
項目だけ表示したいのなら $row['xxx']となるのでは?

投稿2016/12/08 15:21

yodel

総合スコア508

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問