我想检查 $_POST
的变量是否为空,然后将null插入我的数据库。
但是,当我以自己的方式进行操作时,我总是会得到一个称为null的字符串,而不是我的数据集中的真实零。
这就是我尝试的方式:
if(isset($_POST['folge'])){
$comment = !empty($_POST['comment']) ? "'".$_POST['comment']."'" : null;
$sqlstring = "INSERT INTO eventstest (comment) VALUES (".$comment.")";
echo $sqlstring;
if ($mysqli->query($sqlstring) === TRUE) {
printf("Table myCity successfully created.n");
}else{
printf("Errorcode: %dn", $mysqli->errno);
printf("Error: %dn", $mysqli->error);
}
如果我在不向"注释"页面输出的情况下发送表单是:
插入eventstest(comment(values((errorcode:1136错误:0
怎么了?或者是检查空输入并将null添加到db的更好方法?
ps:数据库单元具有标准:null
如果要将NULL
值插入MySQL,则必须在SQL查询中传递null值,而不是NULL的字符串。从PHP的角度来看,它仍然是一个字符串,而不是从MySQL角度来看。
if (!empty($_POST['comment'])) {
$comment = "'".$mysqli->real_escape_string($_POST['comment'])."'";
} else {
$comment = "NULL";
}
您也可以使用三元运算符
将其缩短到单线。$comment = !empty($_POST['comment']) ? "'".$mysqli->real_escape_string($_POST['comment'])."'" : "NULL";
然后,因为您应该按照自己的意愿分配注释本身的引号,因为您另外要通过零值,所以您需要从查询中删除围绕变量的单个引号。否则,这也将破坏它,因为您将获得''comment''
。
$sql = "INSERT INTO table (comment) VALUES (".$comment.")";
当然,这假设列comment
允许null值。否则它将失败,在这种情况下,您应该插入空字符串或更改列以接受为空值。
还应注意,此查询暴露于SQL注入攻击中,并且您应该使用支持准备好的语句的API,例如PDO或MySQLI,并利用这些API来保护数据库免受此类攻击。使用MySqli准备的准备声明看起来像这样。如果$_POST['comment']
为空,请查看如何向bind_param()
中的值提供PHP null
。
// Set MySQLi to throw exceptions on errors, thereby removing the need to individually check every query
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
if (isset($_POST['folge'])) {
// $comment = !empty($_POST['comment']) ? $_POST['comment'] : null; // Ternary operator
$comment = $_POST['comment'] ?? null; // Null coalescing operator, since PHP 7
$sql = "INSERT INTO eventstest (comment) VALUES (?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", $comment);
$stmt->execute();
$stmt->close();
}
- php三元操作员
- 如何防止PHP中的SQL注入?
这里有几件事。首先是您使用的是字符串串联而不是准备好的语句。这使您可以开放SQL注入。我建议您立即停止此项目,并在学习使用PDO和准备好的陈述后返回。
其次,'NULL' != null
您需要将其指定为null
最后但并非最不重要的一点是,通常不需要明确检查后视频中的空,然后再次通过null。如果列类型允许null,并且您不通过非零值传递。null将在其中存储在其中