无法在MySQL的日期字段中插入NULL

时间:2014-09-09 16:11:21

标签: php mysql

我正在尝试使用mysqli_query从PHP向mysql插入NULL。

我的代码如下,我想在$chq_date中插入Null:

 $query_string = "INSERT INTO inward_credit
     (custi_id_fk, driver_id_fk, today_date, amount, mode, cheque_date, cheque_no)
     VALUES
     ('$cust_id1', '$driver_id1', '$today_date', '$credit_collected', '$mode', '$chq_date', '$cheque_number')";

     $insert_credit = mysqli_query($con, $query_string);

我试过

$chq_date = "";

导致日期值不正确:''对于第1行的列'cheque_date'

$chq_date = '';

导致日期值不正确:''对于第1行的列'cheque_date'

$chq_date = 'NULL';

日期值不正确:第1行的列'cheque_date'为'NULL'

$chq_date = "NULL";

日期值不正确:第1行的列'cheque_date'为'NULL'

数据库是

CREATE TABLE IF NOT EXISTS `inward_credit` (
`id` int(11) NOT NULL,
  `custi_id_fk` int(11) NOT NULL,
  `driver_id_fk` int(11) NOT NULL,
  `today_date` date NOT NULL,
  `amount` float(50,2) NOT NULL,
  `mode` int(1) NOT NULL,
  `cheque_date` date DEFAULT NULL,
  `cheque_no` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) 

4 个答案:

答案 0 :(得分:2)

您没有插入null,而是在其中插入带有字符NU等的STRING:

$null_val = 'NULL';
$sql = "INSERT .... VALUES ('$null_val')";
                            ^---------^----

由于上述指示始终存在,您永远不能插入实际的sql null。删除引号允许您的字符串null由DB的解析器作为sql null进行SEEN。

答案 1 :(得分:2)

您的列的默认值为NULL,因此不必在INSERT语句中。

$query_string = "INSERT INTO inward_credit
     (custi_id_fk, driver_id_fk, today_date, amount, mode, cheque_no)
     VALUES
     ('$cust_id1', '$driver_id1', '$today_date', '$credit_collected', '$mode', '$cheque_number')";

     $insert_credit = mysqli_query($con, $query_string);

修改

如果您想插入NULL,请使用以下内容;

  • 不要引用变量$chq_date,因为这会使NULL成为字符串。请参阅Marc B's Answer

//if/else logic.
if(<<what>>) {
  $chq_date = "2014/09/09";
} else {
  $chq_date = "NULL";
}

$query_string = "INSERT INTO inward_credit
     (custi_id_fk, driver_id_fk, today_date, amount, mode, cheque_date, cheque_no)
     VALUES
     ('$cust_id1', '$driver_id1', '$today_date', '$credit_collected', '$mode', $chq_date, '$cheque_number')";

     $insert_credit = mysqli_query($con, $query_string);

答案 2 :(得分:0)

尝试不带引号的NULL

$query_string = 
"INSERT INTO inward_credit (custi_id_fk, driver_id_fk, today_date, amount, mode, cheque_date, cheque_no)
 VALUES ('$cust_id1', '$driver_id1', '$today_date', '$credit_collected', '$mode', $chq_date, '$cheque_number')"

另外,在你的故事定义中DEFAULT NULL是多余的(在sql中默认为NULL,因此当你不想要NULL时必须指定NOT NULL)。

答案 3 :(得分:0)

在表中,您的默认值为NULL。所以不需要插入

 $query_string = "INSERT INTO inward_credit
     (custi_id_fk, driver_id_fk, today_date, amount, mode, cheque_no)
     VALUES
     ('$cust_id1', '$driver_id1', '$today_date', '$credit_collected', '$mode', '$cheque_number')";

     $insert_credit = mysqli_query($con, $query_string);

但是如果要显式插入null,可以尝试

$query_string = "INSERT INTO inward_credit
     (custi_id_fk, driver_id_fk, today_date, amount, mode, cheque_date, cheque_no)
     VALUES
     ('$cust_id1', '$driver_id1', '$today_date', '$credit_collected', '$mode', NULL, '$cheque_number')";

     $insert_credit = mysqli_query($con, $query_string);