我有一个用于测试示例的嵌套SQL查询来更新多个表。它包含两个 case 语句,用于在对DB执行查询时检查特定条件。这是代码:
// form data
$edit_qid = isset($_POST['editqid']);
$edit_question = isset($_POST['editquestion']);
$edit_ans1 = isset($_POST['editanswer1']);
$edit_ans2 = isset($_POST['editanswer2']);
$edit_ans3 = isset($_POST['editanswer3']);
$edit_correct = isset($_POST['editcorrect']);
// answer ids (comes from another query and it's valid)
while ($rows = mysqli_fetch_assoc($result_aid)) {
$aid[] = $rows['aid'];
}
// update of chosen question and answer options to DB
$upd_question = "UPDATE `question_bank` qtbl INNER JOIN `answer_bank` atbl
SET qtbl.`question`='".$edit_question."',
atbl.`answer`= CASE WHEN atbl.`aid`='".$aid[0]."' THEN '".$edit_ans1."'
WHEN atbl.`aid`='".$aid[1]."' THEN '".$edit_ans2."'
WHEN atbl.`aid`='".$aid[2]."' THEN '".$edit_ans3."'
END
atbl.`correct` = CASE WHEN ".$edit_correct."=='1' THEN '1'
WHEN ".$edit_correct."=='2' THEN '1'
WHEN ".$edit_correct."=='3' THEN '1'
ELSE '0'
END
WHERE qtbl.`qid`=atbl.`question_id` AND qtbl.`qid`='".$edit_qid."'";
mysqli_query($mysqli, $upd_question) or die ("<b>Update of question failed:</b> " . mysqli_error($mysqli));
变量$edit_correct
包含关于答案字符串的值1,2或3,并且根据上面提到的对DB的查询,将保存1或0(真/假),这意味着如果值为1则true将保存为第一个答案选项等。
运行此代码会出现以下错误:
Update of question failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'atbl.`correct` = CASE WHEN 2=='1' THEN '1' WHEN 2=='2' THEN '1' ' at line 7
有什么想法可以解决这个问题吗?提前谢谢。
更新
另外,我检查了以下条件:
,atbl.`correct` = CASE WHEN '". if($edit_correct=='1') {echo 1;} ."' THEN '1'
WHEN '". if($edit_correct=='2') {echo 1;} ."' THEN '1'
WHEN '". if($edit_correct=='3') {echo 1;} ."' THEN '1'
ELSE '0'
END
并收到此错误:Parse error: syntax error, unexpected 'if' (T_IF)
答案 0 :(得分:1)
你必须在两列之间加一个逗号,试试这段代码:
$upd_question = "UPDATE `question_bank` qtbl INNER JOIN `answer_bank` atbl
SET qtbl.`question`='".$edit_question."',
atbl.`answer`= CASE WHEN atbl.`aid`='".$aid[0]."' THEN '".$edit_ans1."'
WHEN atbl.`aid`='".$aid[1]."' THEN '".$edit_ans2."'
WHEN atbl.`aid`='".$aid[2]."' THEN '".$edit_ans3."'
END
,atbl.`correct` = CASE WHEN ".$edit_correct."=='1' THEN '1'
WHEN ".$edit_correct."=='2' THEN '1'
WHEN ".$edit_correct."=='3' THEN '1'
ELSE '0'
END
WHERE qtbl.`qid`=atbl.`question_id` AND qtbl.`qid`='".$edit_qid."'";
mysqli_query($mysqli, $upd_question) or die ("<b>Update of question failed:</b> " . mysqli_error($mysqli));
在第二种情况下你可以使用IF()语句,使用IF会更加可读代码。