【发布时间】:2016-01-04 06:06:32
【问题描述】:
for ($key=0; $key < count($_POST['marks']); $key++) {
$from_marks = $_POST['from'][$key];
$get_marks = $_POST['marks'][$key];
//echo $from_marks." ";
if($get_marks > $from_marks){
// header("location: ../../pages/marks.php?over=err");
// break;
echo "Cant add more marks <br/>";
}
else{
echo $get_marks."<br/>";
$update_marks_query = $db->prepare(
"UPDATE sc_marks SET get_marks='"
.$get_marks
."' WHERE _sid='$sc_foreign_id' AND exam_type='$select_exam_type' ");
$update_marks_query -> execute();
}
}
执行代码时出现问题,我在表的每一行中获取了最后一个获取的值。
更新后的数据结果:
【问题讨论】:
-
所有行最终都包含相同数据这一事实表明
UPDATE语句的WHERE子句始终匹配表中的每一行。如果不知道使用的变量$sc_foreign_id和$select_exam_type是在哪里以及如何定义的,以及它们的相关字段在数据库中包含什么样的数据,我真的无法给出更准确的答案。 -
顺便说一句,您应该在
for循环$query = $db->prepare("UPDATE sc_marks SET get_marks=? WHERE _sid=? AND exam_type=?");之前准备更新语句,然后在每次迭代期间使用$query->execute($get_marks, $sc_foreign_id, $select_exam_type);附加参数。您当前的方法存在安全风险,除了效率低下。阅读SQL injection。