MySQL,如何插入null日期

时间:2013-07-22 09:47:25

标签: php mysql date null

我在将日期字段中的空值插入MySQL表时遇到问题。

这是插入查询:

$query = 'INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES ("'.$string1.'", "'.$string2.'", '.$date1.', '.$date2.')';

列s1和s2取字符串值,d1和d2取日期。当我只使用字符串字段运行此查询时,没有问题。

日期值可以设置为null或者为null,因此我没有在查询中包含引号,而是在之前将它们添加到变量中。这是我用来设置日期值的PHP代码:

if (empty($date1)){
    $date1 = NULL;
}
else{
    $date1part = explode("/",$date1);
    $date1 = '"'.$date1part[2].'/'.$date1part[1].'/'.$date1part[0].'"';
}

如果设置了日期值,则会正确插入记录。但是,当任一日期为空时,不会插入任何内容。

为什么我不能像这样只将空值插入MySQL?

7 个答案:

答案 0 :(得分:7)

试试这个:

$query = "INSERT INTO table (column_s1, column_s2, column_d1, column_d2) 
          VALUES ('$string1', '$string2', " . ($date1==NULL ? "NULL" : "'$date1'") . ", " . ($date2==NULL ? "NULL" : "'$date2'") . ");";

所以例如,如果你把它放入查询:

$string1 = "s1";
$string2 = "s2";
$date1 = NULL;
$date2 = NULL;

结果应为:

INSERT INTO table (column_s1, column_s2, column_d1, column_d2) VALUES ('s1', 's2', NULL, NULL);

答案 1 :(得分:6)

您应该首先将null变量转换为NULL字符串 像这样:

if(is_null($date1)){
    $date1 = 'NULL';
}

如果您使用的是MySQL日期列,则还必须指定它在创建时应保留为null,如下所示:

CREATE TABLE `table` (
id INT NOT NULL AUTO_INCREMENT,
date DATE NULL DEFAULT NULL,
PRIMARY KEY(id)
)

使用绑定参数执行查询也非常重要,例如使用pdo

  1. http://www.php.net/manual/en/pdo.construct.php
  2. http://php.net/manual/en/pdo.prepared-statements.php
  3. How do I insert NULL values using PDO?
  4. 这样的事情:

    $query = 'INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
    VALUES (?, ?, ?, ?)';
    $stmt = $db->prepare($query);
    $stmt->execute(array($string1,$string2,$date1,$date2));
    

答案 2 :(得分:2)

反斜杠N是在MySQL中表达NULL的另一种方式。

尝试将值(反斜杠N):\N放入其中一个参数中:

$data1 = "\N";
$sql="insert into tablename set column_s1='" . $data1 . 
  "', column_s2='" . data2 . 
  "', column_s3='" . $data3 . "'";

参考:http://dev.mysql.com/doc/refman/5.1/en/load-data.html

答案 3 :(得分:1)

在Derby中,如果要插入除已声明Null(column_d1,column_d2)之外的值,则sql:

INSERT INTO DB.table (column_s1, column_s2) VALUES ('s1', 's2');

答案 4 :(得分:1)

此刻可能不需要回答,但我找到的解决方案正是我一直在寻找的。使用Expression传递NULL,如下所示:

['some_date_to_update' => new Expression('NULL')]

因此,MySQL将了解您的需求,并将(NULL)保存在DB中,而不是存储0日期。希望这会对某人有所帮助。

答案 5 :(得分:1)

如果为NULL,则没有工作,只是将日期传递为“ 0000-00-00”

$chequeDate = "0000-00-00";

答案 6 :(得分:0)

在Mysql DATE数据类型中,默认NULL表示

某些版本设置为0000-00-00

某些版本设置为1970-01-01