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

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

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

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

phpMyAdmin

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

PHP

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

Q&A

解決済

2回答

2589閲覧

DBから取得したデータを表に出力したいが真っ白になってしまう

hiziki

総合スコア54

MySQL

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

phpMyAdmin

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

PHP

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

0グッド

0クリップ

投稿2017/04/28 12:25

編集2017/04/28 12:26

DBから取得したデータをPHPで出力したいのですが、なぜかページが真っ白になってしまいます。

※ DB接続のパスワード等は入れてません

CSS

1.view-table{ 2 width:100%; 3 height:100%; 4 border:1px solid #fff; 5}

PHP

1<?php 2 $db['host'] = ''; 3 $db['user'] = ''; 4 $db['pass'] = ''; 5 $db['dbname'] = ''; 6 $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']); 7 8 $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); 9 $pdo->query('SET NAMES utf8'); 10 $st = $pdo->query("SELECT * FROM test "); 11 while ($row = $st->fetch()) { 12 $id = htmlspecialchars($row['id']); 13 $kanriclass = htmlspecialchars($row['kanriclass']); 14 $kanrino = htmlspecialchars($row['kanrino']); 15 $songname = htmlspecialchars($row['songname']); 16 $songnamekana = htmlspecialchars($row['songnamekana']); 17 $memo = htmlspecialchars($row['memo']); 18 19 echo "<div class=\"view-table\"><table><tbody><tr><th><ruby>曲名:<rp>(</rp><rt>フリガナ</rt><rp>)</rp></ruby></th><td><ruby>$songname <rp>(</rp><rt>$songnamekana</rt><rp>)</rp></ruby></td></tr><tr><th>NO</th><td>$id</td><th>管理番号</th><td>$kanriclass-$kanrino</td></tr><tr><th>メモ</th><td>$memo</td></tr>"; 20 } 21 ?>

###試したこと
1.代入値以外のところをシングルクォーテーション('')に変えてみたが、表示されなかった。

2.タグ内にあるダブルクオーテーション("")の前後に「\」を入れてみたが、表示されなかった。(上記構文です)

###バージョン等
PHP:7.0.17

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

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

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

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

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

guest

回答2

0

$pdo->query('SET NAMES utf8');

はできるだけ使わないようにしてください。
dsnで指定してるので問題ないとは思いますが、どうしてもやりたいなら
$pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES utf8');
とします

また、pdoではエラーを拾うためにtry~catchするのが標準的なやり方です
assocについてはsetAttributeしてもfetch内で参照してもどちらでもいいかと
普通fetchはwhileで繰り返し処理しますがご提示のソースだとwhileする意味があまりないかと

PHP

1try{ 2 $dsn = 'mysql:host=localhost; dbname=mydb'; 3 $user = 'root'; 4 $password = '******'; 5 $pdo = new PDO($dsn, $user,$password); 6 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 7 $pdo->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND,'SET NAMES utf8'); 8 $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 9 $sql="SELECT * FROM test"; 10 $stmt = $pdo->query($sql); 11 $row=$stmt->fetch(PDO::FETCH_ASSOC); 12 print_r($row); 13}catch(PDOException $e){ 14 die($e->getMessage()); 15} 16

投稿2017/04/28 12:38

編集2017/04/28 12:46
yambejp

総合スコア114775

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

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

hiziki

2017/04/28 12:53

ご回答ありがとうございます。 try catch文使ってみます
guest

0

ベストアンサー

がると申します。

「真っ白にな」る場合、可能性として「エラー表示がoffになっていて、かつ、パース等でエラーが出ている」可能性があるか、と思われます。
.htaccessファイルに

php_value display_errors 1 php_value error_reporting 32767

を記述してから実行をすると、或いはなにかエラーが出てくるかもしれない、と思いますが、如何でしょうか?

投稿2017/04/28 14:08

gallu

総合スコア506

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

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

hiziki

2017/04/28 14:26

ご回答ありがとうございます。 .htaccess の方に記述したところ、「500エラー」がでたので、PHPファイルに直接 <?php ini_set( 'display_errors', 1 ); ?> を記述しましたが、変わらずなにも表示されませんでした
gallu

2017/04/28 14:59

500エラーの場合、可能性としては「そもそもPHPが動く設定がきちんと機能していない」「.htaccessの記述にミスがあった」「AllowOverrideディレクティブに必要な許可(OptionsまたはAll)が与えられていない」あたりが想起されるのですが。 とりあえず状況の切り分けとしては ・PHPのコード自体は、サーバの設定的に動く状態でしょうか? が一番先か、と思います。 もしPHPが動く場合、サーバの設定を確認できそうであればしていただきたいのですが。 もし難しいなどの場合、「別ファイル経由で試す場合」を試してみたら、どのようになりますでしょうか? コメントにコードが書けないようなので、べた書きで恐縮ですが。 (確認したいファイル名は hoge.php とします) <?php ini_set('display_errors', 'on'); error_reporting(E_ALL); include(‘./hoge.php’);
hiziki

2017/04/28 15:14

ご回答ありがとうございます。 他のPHPファイルは動いています。 しかし、 hogeview.php <?php ini_set('display_errors', 'on'); error_reporting(E_ALL); include(‘./hoge.php’); ?> hoge.php <?php echo 'hogehoge'; ?> の場合ですと、hogeview.phpにアクセスしても同様に見れませんでした
gallu

2017/04/28 15:23

すみませんコピペでミスがあったようです。 include(‘./hoge.php’); の行ですが、シングルクォートが全角になってしまっているので。 半角の include('./hoge.php'); で、試してみてください。
hiziki

2017/04/28 15:31

ありがとうございます。 こちらも確認不足でした。 半角のシングルクォートですと、表示できました
gallu

2017/04/28 15:39

上述コードの hoge.php の部分を、確認したいプログラムのファイル名にすると、もしシンタックスエラー等で落ちているようであれば、表示がでるので、手がかりになるか、と思います。
gallu

2017/04/28 15:43

多分、そろそろ寝てしまうので、もう1点。 もし上述で「エラーが出ない」場合、単純に、データが拾えていない可能性があります。 $st = $pdo->query("SELECT * FROM test "); の次に var_dump('PDOStatement is ', $st); $data = $st->fetchAll(); var_dump('data is ', $data); exit; と入れてみてください。 これの戻り値によって、状況がクリアになるかもしれません。
hiziki

2017/05/02 12:27

遅くなってしまい、すみません。 <?php ini_set('display_errors', 'on'); error_reporting(E_ALL); include('./hoge.php'); ?> で該当ファイルを表示してみると、エラーがでました。どうやら、echoの前で改行していたのが原因みたいです。 ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問