首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只更新用户在窗体中更改的字段。

问只更新用户在窗体中更改的字段。
EN

Stack Overflow用户
提问于 2014-01-19 07:12:16
回答 2查看 3.5K关注 0票数 2

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

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

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

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

  • mySQL会自动检测到您正在用它已经包含的值更新一个字段,而实际上并没有更新该字段。不确定其他数据库的情况是否相同,可以与php一起使用。

另外,上面的说法有多真实?

EN

回答 2

Stack Overflow用户

发布于 2014-01-19 07:18:08

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

代码语言:javascript
复制
// 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);
票数 0
EN

Stack Overflow用户

发布于 2014-01-19 07:42:42

很简单,在提交表单之后,请执行以下操作:

代码语言:javascript
复制
if(isset($_POST['name'])) {
// Do the update
}
else {
// Don't do anything because it means there is no $_POST['name']
}

这是基本的逻辑,我希望这就是你想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21214174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档