php/mysql插入null如果变量为空



我想检查 $_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将在其中存储在其中

相关内容

  • 没有找到相关文章

最新更新