我正在开发一个Web应用程序项目,并且有一个相当大的html表单,需要将其数据存储在表中。表单和插入已经完成,但我的客户希望能够将保存的数据加载回HTML表单并能够更改它,再次,这没有问题,但我在进行更新时遇到了一个问题,如果只是保留插入查询,然后删除旧行(如果它是编辑?)是否合适?
基本上,已经发生的事情是在提交表单时使用INSERT将所有数据放入表中,如果数据是针对正在更新的现有字段,我还有一个名为edit的标志,其中包含主键ID。我可以通过两种方式处理更新功能:
a)创建包含所有字段/数据集的实际更新查询,并使用if / else来决定是运行更新还是插入查询。
b)每次插入,但在插入成功后向DELETE WHERE row = editID添加一行。
由于删除只会在INSERT成功的情况下发生,我不会冒没有插入而删除数据的风险,从而丢失数据,但由于INSERT / DELETE是两个查询,它的效率会低于仅仅使用if / else决定是否运行插入或更新?
还有第二个表使用自动增量ID作为外键,但每次提交表单时都必须更新此表,因此如果我删除表A中的行,我也将删除表b中的相关行。这似乎是糟糕的编程习惯,所以无论如何我倾向于选项a)但是使用单行选项非常诱人。 DELETE基本上如下。这实际上是不好的编程习惯吗?除了惯例之外,还有任何理由说明这是“从不这样做!”代码类型?
if ($insertFormResults) {
$formId = mysql_insert_id();
echo "Your form was saved successfully.";
if(isset($_POST['edit'])){
$query = "DELETE FROM registerForm WHERE id='$_POST[edit]'";
$result = mysql_query($query);
}
}
答案 0 :(得分:4)
虽然INSERT / DELETE选项可以很好地工作,但我建议不要这样做:
答案 1 :(得分:0)
更新只是服务器的一次往返,效率更高。除非您有可能导致数据错误的原因,否则始终默认使用UPDATE。
答案 2 :(得分:0)
在我看来,删除操作毫无意义,如果你在MySql中运行更新,它只会更新记录,如果它与已经存储的内容不同,是否有一些原因需要你做删除。我通常使用一个case(switch)来捕获用户的更新/删除调用,
<?php
switch (action) {
case "delete" :
block of coding;
if the condition equals value1;
break;
case "edit" :
block of coding;
if the condition equals value2;
break;
}
?>