3

有一个包含两列“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 个正确答案(3 个来自mysql_num_rows()

错误来了:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'q2' AND ans='4') OR (ques='q3' AND ans='4') OR (ques='q4' AND ans 附近使用的正确语法='4')' 在第 1 行

4

1 回答 1

1

你做错了什么:

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

b) 如果您的表单将扩展到 25 个问题和答案,那么 SQL 语句看起来有问题。如果不是 - 为什么要为此使用 SQL 后端?

于 2012-08-17T23:00:24.330 回答