为了账号安全,请及时绑定邮箱和手机立即绑定

如何更新列而不是向其添加另一个值?

如何更新列而不是向其添加另一个值?

PHP
繁华开满天机 2022-01-23 11:02:50
所以我在我的网站上创建了一个表单,它有一个输入,当用户填写它时,它将它存储在数据库表中,它存储用户写的内容。现在,每当我再次输入内容时,它只会向列添加一个值,我想替换已经添加的值。所以我想要的是,当我输入例如“Datebase”时,它将存储在 MySQL 表中,但是当我再次在同一输入中输入“Datebase change”时,它只会更新当前值,它将从“数据库”到“数据库更改”。所以我不想添加更多的值,我只需要这个输入,它会改变每次提交时列上的内容。我的代码:<?php $title = 'Admin Panel - Edit';include '../config.php';$heading = mysqli_real_escape_string($link, $_REQUEST['heading']);// Attempt insert query execution$sql = "INSERT INTO content (heading) VALUES ('$heading')";if(mysqli_query($link, $sql)){    echo "Records inserted successfully.";} else{    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);}?><form action="edit.php">    <input type="text" name="heading" id="heading" />    <input type="submit" value="Submit" name="submit" /></form>
查看完整描述

1 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

INSERT向表中添加新行。 UPDATE更新现有行。所以你可能会做这样的事情:

UPDATE content SET heading = ?

(注意:我在这里使用参数占位符。虽然以您当前的方式转义输入是一个好主意,但这不是正确的方法。查询参数通常仍然更安全、更稳定。 这是一个很好的起点那个。

但是请注意,如果没有WHERE子句,这将替换表中的每条记录。虽然听起来您只希望表中有一条记录,所以这是您实际想要的行为,对吗?如果是这样,那么我想就逻辑步骤而言,一种简单的方法可能是:

  • 从表中读取。

  • 如果存在一行,则更新。

  • 否则,插入。

但这最终会查询数据库两次,而使用正确的数据模型您只需要执行一次。如果您的表有一个简单的int主键,而不是自动递增,那么您可以执行以下操作:

INSERT INTO content (id, heading) VALUES(1, ?) ON DUPLICATE KEY UPDATE heading = ?

这将做的是显式插入硬编码的主键1。或者,如果该键已经存在于表中(意味着您已经插入了一个预期的记录),那么它会更新该记录。


查看完整回答
反对 回复 2022-01-23
  • 1 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信