人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

「PHPのエラー処理」

PHPでサイトを作りました。勉強用に作っているのでエラー文が垂れ流し状態です。そろそろエラー処理を勉強しようと思います。

$sql = "SELECT * FROM office WHERE id = $id ";

SQL実行時(mysql_fetch_assoc)に条件が一致するものがなければ以下のようなエラーが出ます。

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource以下省略

もし条件に一致しない場合は以下の文を出力したいです。

「条件に一致するオフィスはありません」

どのようなやり方が一番スマートでしょうか?
よろしくお願いします。

●質問者: tokyosmash
●カテゴリ:インターネット ウェブ制作
✍キーワード: Office MySQL PHP SELECT SQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● GEN111
●100ポイント ベストアンサー

現在こんなコードになっているのでしょうか?

$sql = "SELECT * FROM office WHERE id = $id " ;
$result = mysql_query($sql) ;
$row = mysql_fetch_assoc($result) ;

こんな感じではどうでしょうか。

$sql = "SELECT * FROM office WHERE id = $id " ;
$result = mysql_query($sql) ;
if (mysql_num_rows($result) == 0) { // 条件に合った行がゼロ
 echo "条件に一致するオフィスはありません" ;
 // 関数ならここで return するとか
}
else {
 $row = mysql_fetch_assoc($result) ;
 ・
 ・
}

mysql_num_rows を使うのがスマートだと思いますが、

$row = @mysql_fetch_assoc($result) ;

このように関数の頭に「@」を付けると Warning は表示されなくなりますので、ここで $row をチェックする方法もあります。

◎質問者からの返答

丁寧にありがとうございます。大変参考になります。

>現在こんなコードになっているのでしょうか?

そうです、まさにそのようなコードです。質問文の字数制限もあるので簡潔に書いてしまいました。


やはりSQL実行時に何らかの処理をするわけですね。mysql_num_rowsは知りませんでした。これからエラー処理に使ってみようと思います。


ところで、配列のデータが無い場合にforeachで出力してしまったら当然エラーが出ると思います。こちらに関しても質問させていただいております。もしお時間があればよろしくお願いします。

http://q.hatena.ne.jp/1178689228

回答ありがとうございました。


2 ● Yota
●25ポイント

$res = mysql_query($sql,$dsn);

if(!$res) {echo "SqlError"; exit; }

のようにすれば、上のような警告は出さないで済みます。

でも、この警告は結果セットないから出ているのではなく、sqlに間違いがあるから出ています。

該当データがないときは、

if( mysql_num_rows($res) == 0 ) echo'条件に一致するオフィスはありません';

というふうにすればいいと思います。

◎質問者からの返答

回答ありがとうございます。

if(!$res)

の形は初めて見ました。勉強になります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ