質問: ``` fetch(PDO::FETCH_ASSOC); if($count==0){//最初のループで取り出すデータがない場合 if($rec==false){ echo 'テキストテキストテキストテキスト'; } } if($rec==false){ break; } echo ''; echo 'データを出力' echo ''; $count++; } ?> ``` 1行ずつデータベースから取り出して、表示したいです。 ただ、取り出せなかった場合の処理を追加したく、悩んでいます。 今、一応取り出せているのですが 方法は最適でしょうか? 他のファイルにも適用していくので もっと、良い方法があれば教えていただきたいです。 よろしくお願い致します。
回答: 一見する限り、おそらく意図通りに動きますが、ちょっと冗長な書き方に感じますね。 例えば、`while`文の条件式の中で`$stmt->fetch`を呼び出してやるようにすると、以下のように書けます。 ``` // $count=0; 行をカウントする必要はない $exists = false; while (($rec = $stmt->fetch(PDO::FETCH_ASSOC)) !== false) { echo ''; echo 'データを出力'; echo ''; $exists = true; } if (!$exists) { //取り出すデータがなかった場合 echo 'テキストテキストテキストテキスト'; } ``` さらには、`$stmt->fetch`の代わりに`$stmt->fetchAll`を使うと、以下のようにも書けます。 ``` $resultSet = $stmt->fetchAll(PDO::FETCH_ASSOC); if (!$resultSet) { //取り出すデータがなかった場合 echo 'テキストテキストテキストテキスト'; } else { foreach ($resultSet as $rec) { echo ''; echo 'データを出力'; echo ''; } } ``` 個人的には、使用する変数の数が少ない後者の方法が好みです。