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

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

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

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

phpMyAdmin

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

PHP

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

Q&A

解決済

3回答

1266閲覧

try~cacthのtryの部分を表示させたいです。

silent_skill

総合スコア19

MySQL

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

phpMyAdmin

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

PHP

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

0グッド

0クリップ

投稿2020/03/16 06:15

「気づけばプロ並み php 」の本の80ページ目を進めています。
お持ちの方いらしたら参照してください。

try~catchの構文のtryの箇所であるスタッフ一覧を出力させたいのですが、catchの部分のただいま障害により大変ご迷惑をお掛けしております。がでてしまいます。
これを解決していただきたいというお願いです。

以下は確認しました。
・コードの打ち間違い
・phpmyadmin起動し直してキャッシュクリア後表示

コードは下記のとおりです。

php

1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="UTF-8"> 5 <title>ろくまる農園</title> 6</head> 7<body> 8 9<?php 10 11try 12{ 13 14$dsn='mysql:dbname=shop;host=localhost;charset=utf8'; 15$user='root'; 16$password=''; 17$dbh=new PDO($dsn,$user,$password); 18$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); 19 20$sql='SELECTcode,nameFROMmst_staffWHERE1'; 21$stmt=$dbh->prepare($sql); 22$stmt->execute(); 23 24$dbh=null; 25 26print'スタッフ一覧<br/><br/>'; 27 28print'<form method="post" action="staff_edit.php">'; 29print'<input type="radio" name="staffcode" value="'.$rec['code'].'">'; 30while(true) 31{ 32 $rec=$stmt->fetch(PDO::FETCH_ASSOC); 33 if($rec==false) 34 { 35 break; 36 } 37 print $rec['name']; 38 print'<br/>'; 39} 40print'<input type="submit" value="修正">'; 41print'</form>'; 42} 43catch(Exception $e) 44{ 45 print'ただいま障害により大変ご迷惑をお掛けしております。'; 46 exit(); 47} 48 49?> 50 51</body> 52</html>

よろしくお願いします。

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

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

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

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

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

m.ts10806

2020/03/16 06:40

>phpmyadmin起動し直して phpMyAdminはあくまでMySQLを操作するためのツールにすぎないので「起動し直して」だと、「ログインし直した」または「ブラウザで再アクセスした」だけの操作となりますが自身がした行動と合致しますか?
m.ts10806

2020/03/16 06:41

あと、そのSQLは直接DBに対して実行したものではないですよね、 実行して想定の結果が返ってくるか確認できてないものをアプリケーションから使っては行けません。
silent_skill

2020/03/16 06:47

すみません。phpMyadminではないですね。 ザンプのmysqlをstopしていたのでスタートを押したということです。
m.ts10806

2020/03/16 07:00

用語や状況は正しく書かないと伝わりませんし思わぬ詮索が発生して無駄なやり取りが発生します。 質問は修正できますので、今からでも誤りの部分は修正しておいてください
m.ts10806

2020/03/16 07:12

多発してるのであえて書きませんが teratailのサイト内検索で「気づけばプロ並み」とか「ろくまる農園」とか検索してみると良いです。 その書籍、回答者観点だとお世辞にも評判が良いとは言えません。 そもそもですが、本のままやっていくことが目的になってるとプロ並みどころか初心者からも卒業できません。
guest

回答3

0

ベストアンサー

php

1$sql='SELECTcode,nameFROMmst_staffWHERE1';

php

1$sql='SELECT code,name FROM mst_staff;';

データの取得や表示が終わっていないのに
$dbh=null;をやる意味もわからない。

while(true)なんて、
ブロック内でbreak;を書いているとはいえ
まず書いちゃダメ。
break;の条件に至らないと無限ループとして処理が終わらず、
実行時間の時間切れで強制終了になるだけだし。
せめて
while ($rec = $stmt->fetch(PDO::FETCH_ASSOC)) {
とかにしませんか。

PHP: PDOStatement::fetch - Manual

返り値

この関数が成功した場合の返り値は、取得形式によって異なります。 失敗した場合は常に FALSE を返します。

それと、fetch()するまえに、
fetch()結果が入る$recを参照しているのもおかしい。

投稿2020/03/16 06:20

編集2020/03/16 07:49
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

silent_skill

2020/03/16 06:55

ご指摘いただいた半角スペースを空けていなかった点と、$rec['code']の設置個所が間違ってたようです。 ありがとうございました。
guest

0

$sql='SELECTcode,nameFROMmst_staffWHERE1';
↓↓↓
$sql='SELECT code,name FROM mst_staffWHERE1';

とするところから

投稿2020/03/16 06:20

yambejp

総合スコア114839

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

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

0

解決されたようですが、念のためのアドバイスです。

本質的には「半角スペースをあけていなかったこと」が問題ではなく「正しいSQLを書いていなかった」が問題です。
DBはPHPなどのアプリケーションからすると外部の仕組みです。PHPの中で動いているのではなく、PHPからMySQLにリクエストを送って実行してもらった結果を得ています。
SQL自体の実行はMySQL内で行われます。

つまり、MySQL単体で実行して想定の結果を得られないのであれば、当然PHPから実行しても想定の結果は得られません。
なので、まず、想定の結果を得られるSQLを作って想定の結果を得られるまでMySQLに対して実行して、SQL文を改修してください。
phpMyAdminからも実行できます。ユーザー入力などで動的に値が変わるのでしたら、想定の値を固定でも構いません。

こうすることで問題の切り分けができるようになります。
「SQLは問題ない」から入ったほうが何かあったときに1つ問題がクリアになった状態から入れるので、問題解決も早くなります。

あとは開発途中や学習段階ではデバッグできるようにしておくことです。 PHPのエラーを画面表示しておくことはもちろん、try-catchのcatchで捕捉したexceptionも出力しておくことです。
ひとまず、var_dumpでじゅうぶんです。

参考まで。

投稿2020/03/16 07:09

m.ts10806

総合スコア80850

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

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

silent_skill

2020/03/16 08:27

詳しく解説してくださりありがとうございます。 感謝します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問