Isn';t PHP';s空值等于MySQL';什么是空值?
我在php上有一个变量,它有时可以是Isn';t PHP';s空值等于MySQL';什么是空值?,php,mysql,Php,Mysql,我在php上有一个变量,它有时可以是NULL,我想把这个变量插入数据库。但问题是,PHP的null值并没有作为null值插入到db中 我在db上的列允许空值 if($variable != true){ $variable = null; } //insert my null value to db $insert = $db->prepare("insert into mytable set mycolumn = $variable" ); $insert->execut
NULL
,我想把这个变量插入数据库。但问题是,PHP的null值并没有作为null值插入到db中
我在db上的列允许空值
if($variable != true){
$variable = null;
}
//insert my null value to db
$insert = $db->prepare("insert into mytable set mycolumn = $variable" );
$insert->execute();
//mycolumn is an integer column which is DEFAULT null
//above query fails. Why?
这是因为在创建查询字符串时,PHP
null
被转换为空字符串“”
$variable = null;
$insert = "insert into mytable set mycolumn = $variable" ;
echo $insert;
将产生:
insert into mytable set mycolumn =
"insert into mytable set mycolumn = NULL"
要修复查询,您需要检查PHP变量是否为null,并将其更改为字符串null。(现在@MarkB的评论中也提到了这一点。)
这将产生:
insert into mytable set mycolumn =
"insert into mytable set mycolumn = NULL"
请注意,NULL周围没有“空”,因为它现在连接到另一个字符串。
*(注意:
insert into tablename set.
不正确,您可以insert
数据,或者更新tablename set
数据。)这是因为在创建查询字符串时,PHPnull
被转换为空字符串“”
$variable = null;
$insert = "insert into mytable set mycolumn = $variable" ;
echo $insert;
将产生:
insert into mytable set mycolumn =
"insert into mytable set mycolumn = NULL"
要修复您的查询,您需要检查PHP变量是否为null,并将其更改为字符串null。(现在在@MarkB的注释中也提到了这一点。)
这将产生:
insert into mytable set mycolumn =
"insert into mytable set mycolumn = NULL"
请注意,NULL周围没有“空”,因为它现在连接到另一个字符串。
*(注意:
insert into tablename set.
不正确,您可以insert
数据,也可以更新tablename set
数据。)(这不是对您实际问题的回答,但可能是对您的问题的回答。关于双引号字符串中的“立即”问题已得到解答)
因为您已经在使用,所以可以简单地将其设置为参数化语句
$insert = $db->prepare('insert into mytable set mycolumn=?' );
$insert->execute( array($variable) );
$variable===NULL将导致MySQL表中出现空值
e、 g
(不是对您实际问题的回答,但可能是对您的问题的回答。关于双引号字符串中的
因为您已经在使用,所以可以简单地将其设置为参数化语句
$insert = $db->prepare('insert into mytable set mycolumn=?' );
$insert->execute( array($variable) );
$variable===NULL将导致MySQL表中出现空值
e、 g
这是你的真实代码吗?如果是这样的话,你就错过了一个结束语。我在这里写问题时错过了它。我的代码上有一个结束quoute。在MySQL中,NULL值被认为是不相等的。另外,在您的示例中,
$variable
被转换为空字符串=>SQL错误。你应该使用事先准备好的语句。不。字符串上下文中的php null将变为空字符串。您正在执行set mycolumn=代码>,没有值。如果希望php null变成sql null,则必须使用PDO将其转换为字符串,其中包含字符n
,u
,l
,l
,l
,绑定参数并将类型设置为PDO::PARAM_NULL
应该可以做到这一点:-因此,虽然PHP的NULL
不一定与MySQLs相同,但您可以使用它来确保在PHP值为NULL
时将NULL
插入数据库,这是您的实际代码吗?如果是这样的话,你就错过了一个结束语。我在这里写问题时错过了它。我的代码上有一个结束quoute。在MySQL中,NULL值被认为是不相等的。另外,在您的示例中,$variable
被转换为空字符串=>SQL错误。你应该使用事先准备好的语句。不。字符串上下文中的php null将变为空字符串。您正在执行set mycolumn=代码>,没有值。如果希望php null变成sql null,则必须使用PDO将其转换为字符串,其中包含字符n
,u
,l
,l
,l
,绑定参数并将类型设置为PDO::PARAM_NULL
应该可以做到这一点:-因此,虽然PHP的NULL
不一定与MySQLs相同,但您可以使用它来确保在PHP值为NULL
时将NULL
插入数据库,这就是我问题的答案,但是如果null是mysql上的字符串,那么我为什么要使用。。将column=null设置为,而不是。。在我的mysql编辑器上设置column=“null”
?$insert=“insert into mytable SET mycolumn=$variable”
将$variable设置为“null”也会产生这种情况。这里的问题是从php到mysql的转换,您需要以字符串形式提供查询,这就是为什么在连接字符串时,变量中的“null”会消失的原因。这是我问题的答案,但是如果null是mysql上的字符串,那么我为什么要使用。。将column=null设置为,而不是。。在我的mysql编辑器上设置column=“null”
?$insert=“insert into mytable SET mycolumn=$variable”
将$variable设置为“null”也会产生这种情况。这里的问题是从php到mysql的转换,您需要以字符串形式提供查询,这就是为什么在连接字符串时,变量中的“已消失”。