15

我无法将空值插入 MySQL 表中的日期字段。

这是插入查询:

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

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

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

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

当日期值全部设置好后,记录被正确插入。但是,当任一日期为空时,不会插入任何内容。

为什么我不能像这样在 MySQL 中插入空值?

4

7 回答 7

12

尝试这个:

$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);
于 2013-07-22T10:16:10.133 回答
7

您应该首先将 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. 如何使用 PDO 插入 NULL 值?

像这样的东西:

$query = 'INSERT INTO table (column_s1, column_s2, column_d1, column_d2)
VALUES (?, ?, ?, ?)';
$stmt = $db->prepare($query);
$stmt->execute(array($string1,$string2,$date1,$date2));
于 2013-11-08T13:34:49.607 回答
3

如果 NULL 不起作用,只需将您的日期传递为“0000-00-00”:

$chequeDate = "0000-00-00";
于 2018-06-28T05:18:02.120 回答
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

于 2013-07-22T10:13:11.137 回答
1

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

INSERT INTO DB.table (column_s1, column_s2) VALUES ('s1', 's2');
于 2014-07-29T18:03:01.270 回答
1

目前可能不需要答案,但我找到了我一直在寻找的解决方案。使用 an像这样Expression传递NULL

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

因此,MySQL 将了解您想要什么,并将其保存(NULL)在数据库中,而不是存储 0 日期。希望这会对某人有所帮助。

于 2015-02-04T13:33:36.857 回答
0

在 MysqlDATE数据类型中默认NULL表示

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

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

于 2019-01-17T08:38:37.860 回答