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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

解決済

2回答

2254閲覧

PHP,MySQLで値を取り出して行に表示出来ませんでした

oyatsu8

総合スコア97

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

0クリップ

投稿2017/09/09 16:46

編集2017/09/09 18:28

PHP,MySQLを最近勉強しはじめ、
入門書籍( PHP 7+MySQL 入門ノート 2016/7/1 大重 美幸 (著)の13章)を参考に自分の作ったテーブルからデータを読み出すプログラムを作ってみたのですが、値を取り出して行に表示する所が実行出来ませんでした。
echo "<th>", "ID", "</th>";はブラウザに反映されるのですが、
echo "<td>", es($row['id']), "</td>"; が表示されません。
es($row['id']) の部分がphpMyAdminのテーブルから値を取出していることは分かるのですが、es($rowの部分が何をしているのかが、ネットで調べてもよくわかりませんでした。
色々やってみたのですが、表示されず、、
助言を頂けると助かります。

html

1 2<!DOCTYPE html> 3<html lang="ja"> 4<head> 5<title>PDOでdbに接続</title> 6</head> 7<body> 8<div> 9 <?php 10 // データベースユーザ 11 $user = 'test'; 12 $password = 'test'; 13 // 利用するデータベース 14 $dbName = 'test'; 15 // MySQLサーバ 16 $host = 'test.test.test'; 17 // MySQLのDSN文字列 18 $dsn = "mysql:host={$host};dbname={$dbName};charset=utf8"; 19 20 //MySQLdbに接続 21 try { 22 $pdo = new PDO($dsn, $user, $password); 23 $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 24 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 25 echo "db{$dbName}に接続しました。"; 26 // SQL文(全レコード) 27 $sql ="EXPLAIN SELECT * FROM test01"; 28 // プリペアドステートメントを作る 29 $stm = $pdo->prepare($sql); 30 // SQL文の実行 31 $stm->execute(); 32 // 結果取得 33 $result = $stm->fetchAll(PDO::FETCH_ASSOC); 34 // テーブルのタイトル行 35 echo "<table>"; 36 37 echo "<thead><tr>"; 38 echo "<th>", "ID", "</th>"; 39 echo "<th>", "名前", "</th>"; 40 echo "<th>", "場所", "</th>"; 41 echo "<th>", "緯度", "</th>"; 42 echo "<th>", "経度", "</th>"; 43 echo "</tr></thead>"; 44 45 // 値を取り出して行に表示する 46 echo "<tbody>"; 47 foreach ($result as $row){ 48 // 1行ずつテーブルに入れる 49 echo "<tr>"; 50 echo "<td>", es($row['id']), "</td>"; 51 echo "<td>", es($row['name']), "</td>"; 52 echo "<td>", es($row['place']), "</td>"; 53 echo "<td>", es($row['latitude']), "</td>"; 54 echo "<td>", es($row['lognitude']), "</td>"; 55 echo "</tr>"; 56 } 57 echo "</tbody>"; 58 echo "</table>"; 59 60 61 // 接続を解除する 62 /*$pdo = NULL;*/ 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>

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

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

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

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

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

guest

回答2

0

下記をどっかに追加してください。

php

1function es($str) { 2 return htmlspecialchars($str, ENT_QUOTES, 'UTF-8'); 3}

質問の記述を見る限り、入門書籍を全然理解していないので、もう一度読み直したほうが良いです。

質問をざっと見て気にすべき箇所を抜き出しました。
以下を気にしながら読み直してください。

・関数とは
・phpMyAdmin とは
・EXPLAIN とは

投稿2017/09/09 17:16

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

oyatsu8

2017/09/09 17:50

どうもありがとうございます! 前々理解出来ていないようです、、読み直してみようと思います。
guest

0

ベストアンサー

参考にされた書籍は書籍名を書かれたほうが良いです。
関数 es() が定義されていません。書籍内でその定義が書かれていませんか?

また、エラーを表示するようにしたほうが良いです。

PHP

1<?php 2//エラー出力強制 3ini_set( 'display_errors', 1 ); // エラーを画面に表示(1を0にすると画面上にはエラーは出ない) 4//すべてのエラー表示 5error_reporting( E_ALL );

【PHPのエラーメッセージを出力する | mawatari.jp】
http://mawatari.jp/archives/how-to-display-php-errors

投稿2017/09/09 16:58

kei344

総合スコア69364

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

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

oyatsu8

2017/09/09 17:48

ありがとうございます、見直してみた所、util.phpというライブラリが読み込まれていました。 <?php // XSS対策のためのHTMLエスケープ function es($data, $charset='UTF-8'){ // $dataが配列のとき if (is_array($data)){ // 再帰呼び出し return array_map(__METHOD__, $data); } else { // HTMLエスケープを行う return htmlspecialchars($data, ENT_QUOTES, $charset); } } // 配列の文字エンコードのチェックを行う function cken(array $data){ $result = true; foreach ($data as $key => $value) { if (is_array($value)){ // 含まれている値が配列のとき文字列に連結する $value = implode("", $value); } if (!mb_check_encoding($value)){ // 文字エンコードが一致しないとき $result = false; // foreachでの走査をブレイクする break; } } return $result; } // ?> しかしやはりエラーが出ましたが、 Notice: Undefined index: name in /---/PDO_testdb.php on line 64 元のコードを更にみると、そのライブラリを使っていたのは別の全てのレコードを取り出す仕様のサンプルだったことが分かり、解決しました。どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問