Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Isn';t PHP';s空值等于MySQL';什么是空值?_Php_Mysql - Fatal编程技术网

Isn';t PHP';s空值等于MySQL';什么是空值?

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

我在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->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
数据。)

这是因为在创建查询字符串时,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
数据。)

(这不是对您实际问题的回答,但可能是对您的问题的回答。关于双引号字符串中的“立即”问题已得到解答)

因为您已经在使用,所以可以简单地将其设置为参数化语句

$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的转换,您需要以字符串形式提供查询,这就是为什么在连接字符串时,变量中的“已消失”。