「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以下省略

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

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

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

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/05/09 15:05:00
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:GEN111 No.1

回答回数472ベストアンサー獲得回数58

ポイント100pt

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

$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 をチェックする方法もあります。

id:tokyosmash

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

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

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


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


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

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

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

2007/05/09 14:43:35

その他の回答1件)

id:GEN111 No.1

回答回数472ベストアンサー獲得回数58ここでベストアンサー

ポイント100pt

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

$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 をチェックする方法もあります。

id:tokyosmash

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

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

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


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


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

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

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

2007/05/09 14:43:35
id:Yota No.2

回答回数453ベストアンサー獲得回数28

ポイント25pt

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

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

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

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

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

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

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

id:tokyosmash

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

if(!$res)

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

2007/05/09 15:04:25

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません