如何在准备好的语句中绑定 "DEFAULT" 和 "NULL"?

How to bind "DEFAULT" and "NULL" in prepared statement?

在我准备好的语句中,我试图将 DEFAULTNULL 附加到我的查询中,但这不起作用。我查找了其他答案,但找不到明确的答案。这是我的代码:

  $query = "INSERT INTO tblProjects VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
  $query->bind_param(DEFAULT, $projectnumber, 1, $customer, $customerprojectlead, $mgeprojectlead, $controls, $projecttitle, NULL, NULL, $comments, $getuser, $dateentered, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, NULL, NULL);

这实际上是一个 XY Problem - you don't bind DEFAULT or even, in most cases, NULL (although you can).

您的问题是您使用的 shorthand INSERT 未指定列,因此您必须为 所有个:

INSERT INTO tblProjects VALUES (?, ? ...);


如果您指定要使用 哪个 列,则可以省略任何您希望成为默认值的列(例如自动递增的 PRIMARY KEY)。此外,您想要成为 NULL 的任何列很可能具有 DEFAULT NULL,在这种情况下,您也可以忽略它。

INSERT INTO tblProjects (col2, col4 ...) VALUES (?, ? ...)

注意: 可以在查询中只使用 SQL 关键字,如下所示:

INSERT INTO tblProjects VALUES (DEFAULT, ?, ?, NULL ...)

...但我不会说这是最佳实践

您可以使用COALESCE函数:

INSERT INTO tblProjects (col1, col2, col3) VALUES (coalesce(?,DEFAULT(col1)), ?, ?)

在这种情况下,如果绑定变量被分配给 NULL,则将使用为 col1 指定的默认值而不是 NULL。

请注意,NULL 根本不是问题。您可以执行将 NULL 分配给绑定变量的查询,它们将被正确解释。