【问题标题】:How to Insert a value or NULL? [duplicate]如何插入一个值或NULL? [复制]
【发布时间】:2012-11-02 05:14:27
【问题描述】:

可能重复:
Insert NULL variable into database

我有一个带有列的表(日志):

秒:bigint(20) UNSIGNED NULL

IP地址:varchar(15) NULL

问题在于,每当变量被赋予 NULL 值时,它们作为 IPAddress 列的空字符串和 Seconds 列的 0 插入列中,而不是 NULL

//PHP 5.3.9//

if(isset($_POST['sec']))
        $seconds = mysql_real_escape_string($_POST['sec']);
else
    $seconds = NULL;

if(isset($_POST['ip']))
    $ipaddress = mysql_real_escape_string($_POST['ip']);
else
    $ipaddress = NULL;

$query = mysql_query("INSERT INTO log (Seconds, IPAddress) VALUES('".$seconds."', '".$ipaddress."')", $DbConnectionMyDb);

我在谷歌上搜索过,但所有答案都假设我已经知道变量 $sec$ip 是否将为 NULL。在我的情况下,它取决于 POST 数据。

非常感谢任何帮助。 谢谢。

【问题讨论】:

标签: php sql insert null


【解决方案1】:
"" !== NULL
"NULL" !== NULL
NULL === NULL

您正在插入""

【讨论】:

    【解决方案2】:

    在您将变量组合成字符串的那一刻,变量中的 NULL 值被强制转换为空字符串。您需要构建实际读取的查询:

    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 和预准备语句来抽象出这些类型的任务会更好。

    【讨论】:

      猜你喜欢
      • 2018-04-13
      • 2015-07-09
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      • 2019-12-02
      相关资源
      最近更新 更多