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以下省略
もし条件に一致しない場合は以下の文を出力したいです。
「条件に一致するオフィスはありません」
どのようなやり方が一番スマートでしょうか?
よろしくお願いします。
現在こんなコードになっているのでしょうか?
$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 = "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
回答ありがとうございました。
$res = mysql_query($sql,$dsn);
if(!$res) { echo "SqlError"; exit; }
のようにすれば、上のような警告は出さないで済みます。
でも、この警告は結果セットないから出ているのではなく、sqlに間違いがあるから出ています。
該当データがないときは、
if( mysql_num_rows($res) == 0 ) echo'条件に一致するオフィスはありません';
というふうにすればいいと思います。
回答ありがとうございます。
if(!$res)
の形は初めて見ました。勉強になります。
丁寧にありがとうございます。大変参考になります。
>現在こんなコードになっているのでしょうか?
そうです、まさにそのようなコードです。質問文の字数制限もあるので簡潔に書いてしまいました。
やはりSQL実行時に何らかの処理をするわけですね。mysql_num_rowsは知りませんでした。これからエラー処理に使ってみようと思います。
ところで、配列のデータが無い場合にforeachで出力してしまったら当然エラーが出ると思います。こちらに関しても質問させていただいております。もしお時間があればよろしくお願いします。
http://q.hatena.ne.jp/1178689228
回答ありがとうございました。