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

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

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

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

Q&A

解決済

3回答

1418閲覧

PHPの記述方法について

ssk

総合スコア332

PHP

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

0グッド

0クリップ

投稿2016/06/03 09:00

PHP

1<?php 2 $count=0; 3 while(true){ 4 $rec = $stmt->fetch(PDO::FETCH_ASSOC); 5 if($count==0){//最初のループで取り出すデータがない場合 6 if($rec==false){ 7 echo 'テキストテキストテキストテキスト'; 8 } 9 } 10 if($rec==false){ 11 break; 12 } 13 echo '<li class="list-group-item clearfix">'; 14 echo 'データを出力' 15 echo '<li>'; 16 $count++; 17 } 18 ?>

1行ずつデータベースから取り出して、表示したいです。
ただ、取り出せなかった場合の処理を追加したく、悩んでいます。

今、一応取り出せているのですが
方法は最適でしょうか?

他のファイルにも適用していくので
もっと、良い方法があれば教えていただきたいです。

よろしくお願い致します。

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

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

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

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

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

KiyoshiMotoki

2016/06/03 09:20

WHERE句をわざとあり得ない条件に書き換えるなどして、1行も取得できなかった場合にどのように表示されるか確認してみてください。そうすれば、この方法が最適か否か分かると思います。
KiyoshiMotoki

2016/06/03 09:23

失礼しました、プログラムを読み違えました。 上の指摘は無視願います。
guest

回答3

0

ベストアンサー

一見する限り、おそらく意図通りに動きますが、ちょっと冗長な書き方に感じますね。

例えば、while文の条件式の中で$stmt->fetchを呼び出してやるようにすると、以下のように書けます。

php

1// $count=0; 行をカウントする必要はない 2$exists = false; 3while (($rec = $stmt->fetch(PDO::FETCH_ASSOC)) !== false) { 4 echo '<li class="list-group-item clearfix">'; 5 echo 'データを出力'; 6 echo '<li>'; 7 $exists = true; 8} 9 10if (!$exists) { //取り出すデータがなかった場合 11 echo 'テキストテキストテキストテキスト'; 12}

さらには、$stmt->fetchの代わりに$stmt->fetchAllを使うと、以下のようにも書けます。
http://php.net/manual/ja/pdostatement.fetchall.php

php

1$resultSet = $stmt->fetchAll(PDO::FETCH_ASSOC); 2if (!$resultSet) { //取り出すデータがなかった場合 3 echo 'テキストテキストテキストテキスト'; 4} else { 5 foreach ($resultSet as $rec) { 6 echo '<li class="list-group-item clearfix">'; 7 echo 'データを出力'; 8 echo '<li>'; 9 } 10}

個人的には、使用する変数の数が少ない後者の方法が好みです。

投稿2016/06/03 09:40

編集2016/06/04 04:39
KiyoshiMotoki

総合スコア4791

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

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

mpyw

2016/06/03 11:57

取得失敗時に $resultSet は空配列になるので,厳密な比較を行う 「if ($resultSet === false)」 だと意図したように動かないと思います. 「if (!$resultSet) 」または「if (empty($resultSet))」 で十分でしょう. (個人的には無駄なNotice抑制のない前者のほうが好みなんですが,emptyという語のわかりやすさからPHPコア開発者の中でも後者を推奨する派が多いようです)
ssk

2016/06/03 13:38

KiyoshiMotoki様、CertaiN 様 こんなにスッキリするとは、、、 ありがとうございます。
KiyoshiMotoki

2016/06/04 04:43

CertaiN様 ご指摘ありがとうございます。 改めて確認したところ、fetchAll の戻り値は以下のように説明されていました。 > 取得結果がゼロ件だった場合は空の配列を返し、 失敗した場合は FALSE を返します。 http://php.net/manual/ja/pdostatement.fetchall.php おっしゃる通り if ($resultSet === false) では意図通りに動作しないので、 回答を修正させていただきました。 ssk様 お役に立てたなら幸いです。
guest

0

ざっと書くと

PHP

1 // データをとるところ 2 $ar = array(); 3 while($rec = $stmt->fetch(PDO::FETCH_ASSOC)){ 4 $ar[] = $rec; 5 } 6 7 if (empty($ar)) { // とれなかったとき 8 echo 'テキストテキストテキストテキスト'; 9 } else { // とれたとき 10 foreach ($ar as $r) { 11 echo '<li class="list-group-item clearfix">'; 12 echo 'データを出力' 13 echo '<li>'; 14 } 15 }

さらに、(できれば)機能ごとに関数化して切り分けるのが好みかなあ。

投稿2016/06/03 09:25

takasima20

総合スコア7458

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

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

ssk

2016/06/03 13:36

takasima20様 ありがとうございます。 関数化は考えていませんでした。試してみます。
guest

0

KiyoshiMotoki様

ありがとうございます。

WHERE句をわざとあり得ない条件に書き換えるなどして、1行も取得できなかった場合にどのように表示されるか確認してみてください。
↑試してみたのですが、意図した結果を得られています。

記述方法には問題なさそうでしょうか?

投稿2016/06/03 09:24

ssk

総合スコア332

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問