【发布时间】:2016-02-29 00:10:59
【问题描述】:
如果行存在更新其他插入新记录,编写查询的最佳方法是什么?我正在尝试下面列出的垃圾代码:
<?php
for ($i = 0; $i < ($_POST['count']); $i++) {
$form_details_subquestion_id = $_POST['form_details_subquestion_id'][$i];
$form_details_section_id = $_POST['form_details_section_id'][$i];
$mark = $_POST['mark'][$i];
$remark = $_POST['remark'][$i];
$result = $db->query("
SELECT *
FROM audit_section_markrecord
WHERE
form_details_subquestion_id = $form_details_subquestion_id AND
audit_section_no = $audit_no
");
if ($result->num_rows == 1) {
$query2 = "
UPDATE audit_section_markrecord
SET
mark = '$mark',
dateofmodify = '$date'
WHERE
form_details_subquestion_id = '$form_details_subquestion_id' AND
audit_section_no = '$audit_no'
";
$result2 = $db->query($query2);
$query3 = "
INSERT INTO markrecord_update_details (
audit_section_no,
form_details_subquestion_id,
form_details_section_id,
mark,
userlog,
ipaddress
) VALUES (
'$audit_no',
'$form_details_subquestion_id',
'$form_details_section_id',
'$mark',
'$user_staff',
'$ip'
)
";
$result3 = $db->query($query3);
} else if ($result->num_rows == 0) {
$query4 = "
INSERT INTO audit_section_markrecord (
audit_section_no,
form_details_subquestion_id,
form_details_section_id,
mark
) VALUES (
'$audit_no',
'$form_details_subquestion_id',
'$form_details_section_id',
'$mark'
)
";
$result4 = $db->query($query4);
} else {
echo "<script>alert('Error. Please contact IT support.')</script>";
echo "<script language='javascript'>window.location.href='index.php'</script>";
}
}
上面的代码是在for循环里面写的。我尝试获取 form_details_subquestion_id AND audit_no 是否存在,然后更新旧记录并插入到 markrecord_update_details;否则插入新记录。
我不知道怎么用最容易写的代码。我只是想从这段旅程中学习。
【问题讨论】:
-
最好的方法是使用
insert . . . on duplicate key update。但是,很难说出如何将其应用于您的代码。 -
IMO ,此时您不应专注于查询语句。只要您更新/插入正确的数据..您必须专注于保护您的数据..