在我正在编写的博客上,我希望管理员能够编辑评论。这样做很好,但是由于表中的两个字段应该为空,因此编写新注释存在问题。
Db表comments
的构建如下:
comments(id, content, post_id, comment_author, date, editedBy, editedAt)
在编写新注释时,editedBy
和editedAt
字段应该为空/不填充/为空,因为尚未明显更新。
我不能只将这些字段留空,我可以在其中输入空字符串还是将其标记为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
]);
}
所有参数中都有正确的数据,我只是不知道该如何处理editedBy
和editedAt
。
当评论被编辑后(效果很好),editedBy
将使用编辑该评论的用户名,editedAt
将被编辑评论的日期,所以都是字符串。
我想知道是否需要在这两个字段中输入一个空字符串或将它们设置为null
以及如何执行。
答案 0 :(得分:2)
只要editedAt
和editedBy
可以为空(因此在创建表期间这些列不包含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
只需插入所需的列名