Php 如何将实际空值插入到可空列中?

Php 如何将实际空值插入到可空列中?,php,mysql,null,Php,Mysql,Null,在这里,地址、电话和备注可以是NULL。每当变量设置为NULL且列可为NULL时,我需要它保存NULL,而不是插入空字符串 如何使用PHP将NULL值插入数据库 PHP不打印NULL-它只是一个空字符串。因此,在您的示例中,您将尝试插入',这在SQL中也是一个空字符串 您必须使用NULL(不带引号) 实现这一点的最佳实践是使用ORM或PHP框架,并使用数据库抽象层来实现这一点。尝试切换到准备好的语句(作为奖励,它不太容易进行SQL注入) 这将正确处理MySQL中的null值这是PHP解决方案,但

在这里,地址、电话和备注可以是
NULL
。每当变量设置为
NULL
且列可为NULL时,我需要它保存
NULL
,而不是插入空字符串


如何使用PHP将
NULL
值插入数据库

PHP不打印NULL-它只是一个空字符串。因此,在您的示例中,您将尝试插入
'
,这在SQL中也是一个空字符串

您必须使用
NULL
(不带引号)


实现这一点的最佳实践是使用ORM或PHP框架,并使用数据库抽象层来实现这一点。

尝试切换到准备好的语句(作为奖励,它不太容易进行SQL注入)


这将正确处理MySQL中的
null
值这是PHP解决方案,但您必须使用mysqli,因为MySQL已弃用,请阅读更多信息。 而且,你必须考虑
功能保存($gmt、$name、$address、$phone、$remark)
{
如果(空($phone)){
$phone='NULL';
}否则{
$phone=“””“$phone。””;
}
如果(空($备注)){
$remark='NULL';
}否则{
$remark=“”””$remark。“”;
}
$query=“插入到`user`(`gmt`、`name`、`address`、`phone`、`remark`)值(`gmt`、`name`、`address`、$phone、`remark`)”;
mysql\u查询($query);
}
//测验
保存(“a”、“b”、“c”、“e”、“b”)。
; 保存(“a”、“b”、“c”、“d”和“)。
”; 保存(“a”、“b”、“c”、“d”、“e”)”
; /* 在'user'('gmt'、'name'、'address'、'phone'、'remark`)中插入值('a','b','c',NULL,NULL) 在'user'('gmt'、'name'、'address'、'phone'、'remark`)中插入值('a','b','c','d',NULL) 在“用户”(`gmt`、`name`、`address`、`phone`、`remark`)中插入值('a','b','c','d','e')) */ ?>

使用三元运算符,也可以使用

function save($gmt, $name, $address, $phone, $remark)
{
  if(empty($phone)){
   $phone = 'NULL';
  }else{
   $phone = "'".$phone."'";
  }
  if(empty($remark)){
   $remark = 'NULL';
  }else{
   $remark = "'".$remark."'";
  }
    $query= "INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('$gmt', '$name', '$address', $phone, $remark)";
    mysql_query($query);
}
//tests
save("a", "b", "c", "", "")."<br>";
save("a", "b", "c", "d", "")."<br>";
save("a", "b", "c", "d", "e")."<br>";
/*
INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('a', 'b', 'c', NULL, NULL)
INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('a', 'b', 'c', 'd', NULL)
INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('a', 'b', 'c', 'd', 'e')
*/
?>
字段可以为空

->奥拉斯普雷维斯塔斯酒店

->qtd_aulas_dadas

$add = ($address == '' ? NULL : $address);
$phn = ($phone == '' ? NULL : $phone);
$rmk = ($remark == '' ? NULL : $remark);

但是,我认为他需要检查变量是否为空。。。他不能只在查询中用变量替换
NULL
,他必须使用不推荐使用的函数(最好是通过包装器),转义值,并仅在有实际值时才加引号。。。所以是的,有很多事情要做。假设他是个初学者。。。例如,看看杰拉尔德的答案,这很有道理,但对任何不使用OOP的人来说仍然很复杂。这对他来说可能非常复杂。。。你能用
mysqli\uquot
发布一个解决方案吗?我不认为用
mysqli\uquot
更容易。我想这只是我的偏见。使用
mysql\u*
非常方便,我可以更轻松地将项目迁移到
mysqli\u*
。这就是为什么我认为新的用法更容易掌握
mysqli.*
。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果你选择PDO,这能回答你的问题吗?使用三元:
$phone=($phone=''?NULL:$phone)
的代码会少得多。如果
$phone
是一个字符串值呢?使用
die(mysqli_error($conn))是一个非常糟糕的主意
在您的代码中,因为它可能会泄漏敏感信息。更多解释请参见本文:谢谢@达曼,我将使用
mysqli_报告(mysqli_报告错误| mysqli_报告严格)而不是
模具
function save($gmt, $name, $address, $phone, $remark)
{
  if(empty($phone)){
   $phone = 'NULL';
  }else{
   $phone = "'".$phone."'";
  }
  if(empty($remark)){
   $remark = 'NULL';
  }else{
   $remark = "'".$remark."'";
  }
    $query= "INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('$gmt', '$name', '$address', $phone, $remark)";
    mysql_query($query);
}
//tests
save("a", "b", "c", "", "")."<br>";
save("a", "b", "c", "d", "")."<br>";
save("a", "b", "c", "d", "e")."<br>";
/*
INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('a', 'b', 'c', NULL, NULL)
INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('a', 'b', 'c', 'd', NULL)
INSERT INTO `user` (`gmt`, `name`, `address`, `phone`, `remark`) VALUES ('a', 'b', 'c', 'd', 'e')
*/
?>
$add = ($address == '' ? NULL : $address);
$phn = ($phone == '' ? NULL : $phone);
$rmk = ($remark == '' ? NULL : $remark);
$qtd_aulas_previstas = ( empty($qtd_aulas_previstas) ? 'NULL' : "'".$qtd_aulas_previstas."'");
$qtd_aulas_dadas     = ( empty($qtd_aulas_dadas)     ? 'NULL' : "'".$qtd_aulas_dadas."'");


//insere os dados na tabela
$inserir_tb = mysqli_query($conexao, "INSERT INTO tb_turma_bimestre VALUES('', '$cod_turma', '$cod_bimestre', $qtd_aulas_previstas, $qtd_aulas_dadas, '$data_abertura', '$data_encerramento', '$date_time', '$nome_login')")or die("Error2: " .mysqli_error($conexao));