我想检查来自$_POST
的变量是否为空,并将NULL插入我的数据库。
但是当我这样做时,我总是得到一个名为NULL的String,而不是我数据集中的真正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: %d\n", $mysqli->errno);
printf("Error: %d\n", $mysqli->error);
}
如果我发送表单而没有输入“评论”页面输出是:
INSERT INTO eventstest(comment)VALUES()错误代码:1136错误:0
什么错了?或者,有什么更好的方法来检查空输入并向DB添加NULL?
PS:数据库单元格有STANDARD:NULL
答案 0 :(得分:6)
如果要在MySQL中插入NULL
值,则必须传递空变量。不是null的字符串。从PHP的角度来看,它仍然是一个字符串,但不是从MySQL的角度来看。
if(!empty($_POST['comment'])){
$comment = "'".$_POST['comment']."'";
}else{
$comment = "NULL";
}
您还可以使用三元运算符
将其缩短为单行$comment = !empty($_POST['comment']) ? "'".$_POST['comment']."'" : "NULL";
然后,因为你应该按照你应该的方式在注释字符串本身周围分配引号,因为你或者想要传递一个空值,你需要从查询中删除变量周围的单引号。否则这会打破它,因为你得到''comment''
。
$sql = "INSERT INTO table (comment) VALUES (".$comment.")";
当然,这假设列comment
允许空值。否则它将失败,在这种情况下,您应该插入空字符串或更改列以接受空值。
还应该注意,此查询非常容易受到SQL注入的影响,您应该使用支持预准备语句的API(例如PDO或MySQLi),并利用这些API保护您的数据库免受这类攻击。
答案 1 :(得分:1)
这里有些不对劲。首先,您使用字符串连接而不是预准备语句。这使您可以打开SQL注入。我建议你立即停止这个项目,并在学习使用PDO和准备好的陈述后返回。
其次,'NULL' != null
您需要将其指定为null
最后但并非最不重要的是,通常不需要在postvars中显式检查null,然后再次传递null。如果列类型允许为null,则不传入非null值。 null无论如何都将存储在其中