- ベストアンサー
mySQLで結果が無いときの処理
$sql = "select * from test "; $sql .= "where id='".$_POST["id"]."' and pwd='".$_POST["pwd"]."'"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { if($row){ $msg = "OK"; } } としていますが、NGのときってどういう風にしたらいいのでしょうか? 基本的なことですみませんが、教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $msg = "OK"; } if(!$msg) $msg="NG"; でよいのでは? whileのなかでif($row)をするのはナンセンスでしょう。 $rowがあるからwhileがまわっているのだから・・・ ただ普通ならmysql_num_rows()で処理する方がスマートだとはおもいますが・・・
その他の回答 (1)
- gun_boxer
- ベストアンサー率18% (2/11)
質問の前に、そのSQLだと「SQLインジェクション」なり、IDやパスワードに不正な値が入り、SQLがエラーになることがあるかと思います。 受け取った値をそのまま、変数として扱ったり、SQLにそのまま代入してしまうのは、極めて危険です。シングルクォーテーションとか入れたらコケませんか?大丈夫ですか? それはさておき、 OKと言うのは、認証が通った時のことですよね? それに対して、NGは認証が通らなかった時ですよね? それに対して、どのようにするかは、やりたいようにすればいいのではないでしょうか。 僕でしたら、入力画面に戻り、「IDまたはパスワードが間違っています」とか表示させますが。OK時の処理として、今回$msg = "OK";と記述しているなら、そのelseで何か処理書いてはいかがですか?
補足
SQLインジェクションの件は理解しています。 elseで書いても反応しなかったので困っています。 よろしくお願いします。
補足
ご返答有難うございます。 いつもいつもご返答頂き感謝しております。 そういうことですね。 シンプルに考えるべきでした。 もっと勉強しなくては・・。