首先,您显然没有使用准备好的语句.我强烈建议您以安全性和稳定性的名义使用准备好的语句.
然后,讨论当前的问题.数据库不知道什么是PHP空值,只会看到在您的代码中插入一个空字符串.
"" . null . "" === ""
保留示例代码(非常危险和易受攻击),并修改在要插入的字符串周围添加“引号”的位置.如果名称为null,则插入NULL,并在其周围加上引号.数据库服务器将解释为必须插入空值
$name = $_POST['name'] ? "'".$_POST['name']."'" : 'NULL';
$sql = "INSERT INTO staff (id, name) VALUES ('".$id."', ".$name.")";
现在,确实要研究如何执行准备好的查询以防止SQL注入
或至少使用mysqli_real_escape_string或等效的名称.
这是使用PDO的更安全的版本.
$sql = "INSERT INTO staff (id,name) VALUES (:id,:name)";
$stmt= $dpo->prepare($sql);
$stmnt->bindParam(':id', $id, PDO::PARAM_INT);
if(!$POST['name']) {
$stmnt->bindParam(':name', null, PDO::PARAM_NULL);
}
else {
$stmnt->bindParam(':name', $POST['name'], PDO::PARAM_STR);
}
$stmt->execute();