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));