質問: $stm->fetchAll(PDO::FETCH_ASSOC); // テーブルのタイトル行 echo ""; echo ""; echo "", "ID", ""; echo "", "名前", ""; echo "", "年齢", ""; echo "", "性別", ""; echo ""; // 値を取り出して行に表示する echo ""; foreach ($result as $row){ // 1行ずつテーブルに入れる echo ""; echo "", es($row['id']), ""; echo "", es($row['name']), ""; echo "", es($row['age']), ""; echo "", es($row['sex']), ""; echo ""; } echo ""; echo ""; } catch (Exception $e) { echo 'エラーがありました。'; echo $e->getMessage(); exit(); } ?> ``` データベースサーバアクセスできるのに、テーブルにはアクセスできません。 エラーを見るに、55行付近のesがダメなのかと思ったのですが、消してもうまくいかないので、完全お手上げ状態です。 どなたか、どこを直せばいいか教えてもらえると幸いです。 最悪、このソースコードがだめでも、ほかの方法でMAMPのデータベースにアクセスする方法をご存知の方がいましたら、教えてください。
回答: 先ずはエラーの切り分けから開始しましょう。 本当にテーブルにアクセスできていない(SELECT句実行時エラー)なのでしょうか? 実は別の原因で、動作しない可能性もあるのではないでしょうか。 例えばforeach内のロジックを一旦コメントアウトしてみて下さい。 1.同様のエラーが出るでしょうか? 2.エラーは出るけど別のエラーになるでしょうか? 3.エラーは発生しなくなるでしょうか? ここで3.だった場合は、 PHP側の実装での不具合となり**テーブルにアクセスできない**という質問者さんの想定とは外れてきます。 2.の場合は、別のエラーも複合的に発生しているため、さらなる切り分けが必要です。 1.の場合は少なくともその箇所のロジックが現在出ているエラーに関わりがないことが分かります。 このようにプログラミングでは、 まずある程度あたりをつけてみてその箇所を外して動作が変わるかでざっくりとした切り分けをし、 徐々に対象を絞り込みエラー箇所を突き止める、トライアンドエラーのステップが大事となります。 なので先ずはエラーメッセージの通り、es(多分HTML出力時のエスケープ処理?)を利用されている箇所のロジック自体を外してみて状況を確認してみましょう。