Mysql Query在特定情况下不起作用

时间:2012-08-17 22:41:38

标签: php mysql

有一个包含两列'ques'和'ans'的表格。 通过此查询进行比较后,我计算了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来自mysql_num_rows()

错误来了:
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在'q2'和ans ='4'附近使用正确的语法。或者(问题='q3'和ans ='4')或者(问题='q4'和ans ='4')'在第1行

1 个答案:

答案 0 :(得分:1)

你做错了什么:

a)你没有使用准备好的陈述。这意味着用户提供的输入将最终出现在SQL语句中,从而使您面临无法预料的风险(SQL注入)。这也可能是SQL错误的原因。您可以将SQL语句分配给变量并将其转储到某个位置,以便您可以看到实际尝试执行的操作。或者(更好)你可以使用准备好的陈述。

b)如果您的表单将扩展到25个问题加上答案,那么SQL语句看起来就会出现问题。如果没有 - 为什么你使用SQL后端呢?