PHP MySQL-当一个或多个字段值发生更改时更新数据库的简单方法
我在数据库更新活动上有一个小问题 案例研究: 我使用PHP编辑创建了一个表单,并执行查询以检索要更新的记录的值。剧本节选: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
$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
}