如何更新数据库表以使两个字段为空/不填充/为空

时间:2019-01-22 09:46:20

标签: sql database sql-update

在我正在编写的博客上,我希望管理员能够编辑评论。这样做很好,但是由于表中的两个字段应该为空,因此编写新注释存在问题。

Db表comments的构建如下:

comments(id, content, post_id, comment_author, date, editedBy, editedAt)

在编写新注释时,editedByeditedAt字段应该为空/不填充/为空,因为尚未明显更新。

我不能只将这些字段留空,我可以在其中输入空字符串还是将其标记为NULL

public function insertForPost($content, $post_id, $comment_author, $date, $editedBy, $editedAt)
{
  $table = $this->getTableName();

  $stmt = $this->pdo->prepare(
    "INSERT INTO `{$table}`(`content`, `post_id`, `comment_author`, `date`,
    `editedBy`, `editedAt`) VALUES (:content, :post_id, :comment_author, :date,
    :editedBy, :editedAt)"
  );

  $stmt->execute([
    'content' => $content,
    'post_id' => $post_id,
    'comment_author' => $comment_author,
    'date' => $date,
    'editedBy' => $editedBy,
    'editedAt' => $editedAt
  ]);
}

所有参数中都有正确的数据,我只是不知道该如何处理editedByeditedAt

当评论被编辑后(效果很好),editedBy将使用编辑该评论的用户名,editedAt将被编辑评论的日期,所以都是字符串。

我想知道是否需要在这两个字段中输入一个空字符串或将它们设置为null以及如何执行。

2 个答案:

答案 0 :(得分:2)

只要editedAteditedBy可以为空(因此在创建表期间这些列不包含NOT NULL语句),则可以将它们从表名和VALUES子句之间的带有插入或更新语句的列。因此,查询结果为:

INSERT INTO `{$table}`(`content`, `post_id`, `comment_author`, `date`) VALUES (:content, :post_id, :comment_author, :date);

答案 1 :(得分:1)

在数据库上:

alter table alter <column_name> set default <default_value>; 

假设您使用的是mysql / mariadb,因此对于每个新注释,您都具有默认值的字段。

此代码将使用新值更新数据库中已有的数据。

update <table_name> set <column_name> = <default_value> where <column_name> is null

只需插入所需的列名