如何更新该列,而不是添加另一个值?

时间:2019-09-21 15:14:33

标签: php mysql

因此,我在网站上创建了一个表单,该表单有一个输入,当用户填写该表单时,会将其存储在datebase表中,并存储用户编写的内容。

现在,每当我再次键入内容时,它只会为该列增加一个值,而我想替换已添加的值。因此,我想要的是例如在键入“ Datebase”时将其存储在MySQL表中,但是再次在相同的输入中键入“ Datebase change”时,它将仅更新当前值,并且将其从“ Datebase”到“ 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 个答案:

答案 0 :(得分:2)

INSERT向表添加新行。 UPDATE更新现有行。因此,您可能会执行以下操作:

UPDATE content SET heading = ?

(注意:我在这里使用参数占位符。虽然以目前的方式转义输入是一个好主意,但这不是正确的方法。查询参数通常还是更安全,更稳定。This is a good place to start for that.

请注意,但是,如果没有WHERE子句,它将替换表中的每个记录。尽管听起来很像,但您只希望表中有一条记录,所以这是您实际想要的行为,对吗?如果是这样,那么我认为按照逻辑步骤的简单方法可能是:

  • 从表中读取。
  • 如果存在一行,请更新。
  • 否则,插入。

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

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

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