仅更新用户在表单中更改的字段

时间:2014-01-19 07:12:17

标签: php mysql

假设我有一个包含16到20个字段的表单,包括输入类型文本和textareas。

表单使用POST方法将字段提交到更新表中的表的php页面 带有$ _POST vars的数据库。

我的问题是我想仅在数据库中更新已更改的值,而不是更新每个值,

这种优化应用程序的方法有多好? ,我也在另一个网站上看到了以下答案:

  
      
  • mySQL会自动检测到您正在使用已包含的相同值更新字段,并且实际上并未更新该字段   领域。不确定它是否与其他数据库相同   与php一起使用。
  •   

同样,上述陈述的真实情况如何?

2 个答案:

答案 0 :(得分:0)

使用$_POST变量构建SQL查询时,只需确保未包含$_POST中未设置的任何列名或值。如果SQL UPDATE语句没有列的值并且没有形成期望值,那么DB将不会尝试更新这些列。最好的方法可能是使用foreach循环:

// Init SQL query
$statement = "UPDATE tableName SET ";
$params = array();
// Iterate $_POST variables
foreach ($_POST as $key=>$value) {
    // Append a new SET key/value pair
    $statement .= "$key = :$key, ";
    // You're using prepared statements, right?
    $params[$key] = $value;
}

// Cut off last comma and append WHERE clause
$statement = substr($statement,0,-2)." WHERE id = :id";
// Store id for prepared statement
$params['id'] = $id;
// Prepare the query
$pdo->prepare($statement);
// Execute with parameters
$result = $pdo->execute($params);

答案 1 :(得分:-1)

非常简单,提交表格后,请执行:

if(isset($_POST['name'])) {
// Do the update
}
else {
// Don't do anything because it means there is no $_POST['name']
}

这是基本逻辑,我希望这就是你要找的东西。