当前位置: 首页 > 知识库问答 >
问题:

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

尹承泽
2023-03-14

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

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

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

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

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

还有,上述说法的真实性如何?

共有2个答案

袁建木
2023-03-14

使用$\u POST变量构造SQL查询时,只需确保没有包含任何未在$\u POST中设置的列名或值。如果SQLUPDATE语句没有列的值,并且其格式不符合预期值,则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);
梁锋
2023-03-14

非常简单,提交表单后,请执行以下操作:

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

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

 类似资料:
  • 问题内容: 有人可以建议一种方法来更改动态创建的AlertDialog中的字体(标题和正文)吗?我尝试了很多方法,但是没有一个起作用。代码是: 问题答案: 您应该设置布局的自定义视图,而不是设置alertdialog的文本。在执行此操作之前,请修改视图的字体。 并设置警报对话框的视图,请致电, 尽管据我所知,这不会更改您的标题。 更新 我看到您无法理解我的意思,所以这是一个完整的示例 这使用的是我

  • 新反应和工作在现有的项目。我想当选择元素更改(onInstrumentS选正确地称为),填补其他字段的形式与它的相关值,但不工作。我可以得到正确的数据(在console.log检查),但不能通过相关的新数据填充表单。 试答试答

  • 我有两个实体具有@OneTomany(Entity1)&@ManyToOne(Entity2)双向关系。在@OneTomany关系中,我有@Cascading{Cascade.All}。但是当我在事务或方法中将具有@ManyToOne关系的实体的初始为false的boolean属性更改为true,然后又变回false时,它会导致数据库触发更新查询,将实体的boolean设置为false,这似乎是错

  • 如果选择了一个深色主题,“运行”窗格(不是python的“控制台”,也不是PyCharm中可访问的“终端”)将显示一个非常深色的字体,以至于几乎看不到它。切换到一个轻主题,一切都很好。我在Pycharm、这里、Google和YouTube中找到了关于为编辑器、控制台和终端窗格设置字体颜色的帮助,但在更改运行窗格颜色方面没有任何帮助。有什么想法吗?

  • 我用Word编译了这段代码,它突然出现: 编译错误:应为:表达式 当我改变时就会发生这种情况 代码如下: