3

「ques」と「ans」の 2 つの列を持つテーブルを作成します。このクエリを比較した後、mysql_nuum_rows($result) によってフェッチされた行数を計算します。すべての質問で同じオプション (各ケースの最後のオプション、つまりラジオ ボタンの D) を選択している場合など、特定のケースでエラーが発生します。残りは完全に機能しています。

私は何を間違っていますか?

//  (Values are coming from html form consisting of 4 sets of 4 radio buttons)
$q1=$_POST['q1'];
$q2=$_POST['q2'];
$q3=$_POST['q3'];
$q4=$_POST['q4'];
$result = mysql_query("SELECT * FROM Test  
               WHERE (ques='q1' AND ans='$q1') 
               OR (ques='q2' AND ans='$q2') 
               OR (ques='q3' AND ans='$q3') 
               OR (ques='q4' AND ans='$q4')");

期待される出力:
4 問中 3 問正解 (3 問正解mysql_num_rows())

Error Coming:
SQL 構文にエラーがあります。near 'q2' AND ans='4') OR (ques='q3' AND ans='4') OR (ques='q4' AND ans を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください='4')' 1 行目

4

1 に答える 1

1

あなたが間違っていること:

a) 準備済みステートメントを使用していない。これは、ユーザーが提供した入力が SQL ステートメントに含まれることになり、予期しないリスク (SQL インジェクション) にさらされることを意味します。これも SQL エラーの原因である可能性があります。SQL ステートメントを変数に代入し、どこかにダンプして、実際に何をしようとしているのかを確認することができます。または(より良い)準備済みステートメントを使用できます。

b) フォームが 25 の質問と回答に拡張される場合、SQL ステートメントに問題があるように見えます。そうでない場合 - なぜこれに SQL バックエンドを使用しているのですか?

于 2012-08-17T23:00:24.330 に答える