PHP MySQL-当一个或多个字段值发生更改时更新数据库的简单方法

PHP MySQL-当一个或多个字段值发生更改时更新数据库的简单方法,php,mysql,Php,Mysql,我在数据库更新活动上有一个小问题 案例研究: 我使用PHP编辑创建了一个表单,并执行查询以检索要更新的记录的值。剧本节选: <?php $row = mysql_fetch_assoc(mysql_query("SELECT id, field_1, field_2 FROM mytable WHERE id = $editid")); ?> ... <form action="" method="post"> FIELD 1 <input type

我在数据库更新活动上有一个小问题

案例研究:

我使用PHP编辑创建了一个表单,并执行查询以检索要更新的记录的值。剧本节选:

<?php
  $row = mysql_fetch_assoc(mysql_query("SELECT id, field_1, field_2 FROM mytable WHERE id = $editid"));
?>

 ...

<form action="" method="post">
  FIELD 1 <input type = "text" name = "f1v" value = "<? Php echo $ row ['field_1'];?>" />
  FIELD 2 <input type = "text" name = "f2v" value = "<? Php echo $ row ['field_2'];?>" />
  <input type="submit" />
</form>

....
// When the form posted

if ($_POST)
{
   $f1v = $ _POST['f1v'];
   $f2v = $ _POST['f2v'];

   mysql_query("UPDATE mytable SET field_1 = '$f1v', field_2 = '$f2v' WHERE id = $editid") or die ();

   // Redirect form
}

你有什么简单的方法吗?谢谢你的帮助。

不用麻烦检查了。只需确保条目有效并将其抛出即可。

使用字段的当前值保留两个隐藏字段。提交表单后,检查提交的值是否与隐藏字段值不同。

为什么不更新记录;如果新值与旧值相同,则不会产生任何影响?您可能不想这样做的唯一原因是性能,但我想在这种情况下,这并不是很关键。@KillerX:查找和比较是否会更快,这是有争议的。。。更可能的原因可能是触发器和日志记录;但总的来说,我不明白人们为什么会这样做。@eggyal:这取决于我们谈论的是什么类型的表演。如果您有一个系统,由于某种原因,它处理写操作非常糟糕,但在读取时速度非常快,因为您有一堆只读从机,那么它可能会更好。但我主要考虑的不是是否放弃选择,而是在会话中存储旧值,并在出现结果时比较它们。在这种情况下,您可以避免所有的选择以及不必要的插入。@KillerX:是的,我假设这就是您的意思-但是仍然需要从会话存储中检索值,然后执行比较;有了合适的表索引,MySQL很可能会比PHP更快地执行这组相同的操作,尽管需要进行基准测试才能确定——此外,如果要继续更新,还可以节省第二次重复这些操作的时间。用户输入,即使是来自“隐藏”字段,不可信任。实际上在这种情况下,我想进行系统恢复。如果该值与数据库字段中的现有值相同,则记录数据不会更新,但如果有更改,记录将重复,最后一个未提交的人将处于活动状态,以前的记录将更改为数据恢复。因此,我需要一个比较。你有一个简单的方法吗?@Fredy在清理完表单输入后,大致是:$return=mysql\u querySELECT*FROM table WHERE data=key LIMIT 1,$connection;而$value=mysql_fetch_array$return{if$otherField==value['fieldname']{doRecovery;}else{doInsert;}
if ($ _POST)
{    
    // Compare
   if the submitted value is different from the existing value in the record
   {
      Updated record
   }
   else
   {
      Do not update record
   }       
    // Redirect form
}