Php 如何插入值或空值?
可能重复:Php 如何插入值或空值?,php,sql,insert,null,Php,Sql,Insert,Null,可能重复: 我有一个带有列的表(日志): 秒:bigint(20)无符号NULL IP地址:varchar(15)NULL 问题在于,每当变量的值为NULL时,它们都会作为IPAddress列的空字符串插入到列中,并作为0插入到Seconds列中,而不是作为NULL插入 我在google上搜索过,但是所有的答案都假设我已经知道变量$sec和$ip是否为NULL。在我的例子中,这取决于POST数据 非常感谢您的帮助。 谢谢 您正在插入” 您正在插入”当您将变量组合到字符串时,变量中的空值将转换为
我有一个带有列的表(日志): 秒:bigint(20)无符号NULL IP地址:varchar(15)NULL 问题在于,每当变量的值为NULL时,它们都会作为IPAddress列的空字符串插入到列中,并作为0插入到Seconds列中,而不是作为NULL插入 我在google上搜索过,但是所有的答案都假设我已经知道变量$sec和$ip是否为NULL。在我的例子中,这取决于POST数据 非常感谢您的帮助。 谢谢 您正在插入
”
您正在插入
”
当您将变量组合到字符串时,变量中的空值将转换为空字符串。您需要构造查询,使其实际读取:
VALUES (NULL, NULL)
而不是
VALUES ("", "")
您可以通过以下方式实现:
if (is_null($seconds)) $seconds='NULL'; else $seconds='"'.$seconds.'"';
if (is_null($ipaddress)) $ipaddress='NULL'; else $ipaddress='"'.$ipaddress.'"';
$query = mysql_query("... VALUES(".$seconds.", ".$ipaddress.")", ...);
但是,从长远来看,使用某种类型的数据库库或PDO和准备好的语句(将这些类型的任务抽象出来)会更好。在将变量组合成字符串时,变量中的空值会转换成空字符串。您需要构造查询,使其实际读取:
VALUES (NULL, NULL)
而不是
VALUES ("", "")
您可以通过以下方式实现:
if (is_null($seconds)) $seconds='NULL'; else $seconds='"'.$seconds.'"';
if (is_null($ipaddress)) $ipaddress='NULL'; else $ipaddress='"'.$ipaddress.'"';
$query = mysql_query("... VALUES(".$seconds.", ".$ipaddress.")", ...);
但是,从长远来看,使用某种数据库库或PDO和预先准备好的语句来抽象这些类型的任务会更好。使用占位符。他们将负责
NULL
处理。。并且在不需要手动调用某个外观难看的函数的情况下处理SQL注入。(问题是'
,一个字符串,而不是NULL
在insert中被用作值。)因为在获取它们时它们是字符串,因此您将它们视为字符串(mysql\u real\u escape\u string),PHP将字符串定义为NULL,这与mysql NULL不同。在您的查询中,您应该检查(即if语句)以查看变量是否为NULL,如果为NULL,那么它应该如下所示:值(NULL,“$ipaddress.”),不带引号。可能的重复-为过时的mysql\u
和切换到mysqli\u
的示例提供了解决方案。(同样)搜索“tag:php insert null”以获得更多结果。。它们不再得到维护,并且已经开始使用。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果选择PDO,请使用占位符。他们将负责NULL
处理。。并且在不需要手动调用某个外观难看的函数的情况下处理SQL注入。(问题是'
,一个字符串,而不是NULL
在insert中被用作值。)因为在获取它们时它们是字符串,因此您将它们视为字符串(mysql\u real\u escape\u string),PHP将字符串定义为NULL,这与mysql NULL不同。在您的查询中,您应该检查(即if语句)以查看变量是否为NULL,如果为NULL,那么它应该如下所示:值(NULL,“$ipaddress.”),不带引号。可能的重复-为过时的mysql\u
和切换到mysqli\u
的示例提供了解决方案。(同样)搜索“tag:php insert null”以获得更多结果。。它们不再得到维护,并且已经开始使用。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果您选择PDO。