使用MySql在数据库中输入日期值或空值

时间:2012-08-16 16:03:22

标签: php mysql

我搜索了网站,虽然我找到了类似的问题和答案,但我找不到答案。经过4个小时的搜索,我决定咬紧牙关问问题。

我在表单中有4个不需要的日期字段。如果其中一个字段有条目,我希望它在数据库中输入日期;如果任何字段留空,我希望它为空。

我有一个if语句,检查该值是否为空,如果是$value = null,否则使用$value = date("Y-m-d",strtotime($_post['value']))将其转换为日期,这很有效。

问题出在我的查询中。如果我使用'$ value'它将正确插入日期但不会插入空值,因为使用'null'会使sql认为它是一个字符串。如果我只使用$ value,则null插入就好了,但是日期是以0000-00-00为例。

非常感谢任何建议

感谢您的建议到目前为止......

允许Null,这是我的脚本......

if(empty($_POST['fp32_original_install_date'])){
$fp32_install = NULL;
    }else{
$fp32_install = date("Y-m-d",strtotime($_POST['fp32_original_install_date']));
 }

 $sql = "INSERT INTO accounts_cstm (id_c, support_c, install_date_c, sware_renewal_date_c, product_key_c, account_status_c, fp32_support_type_c, fp32_support_renewal_date_c, fp32_original_install_date_c) VALUES ('$Guid','$cdr_support', '$cdr_install', '$cdr_renew', '$prod_key', '$account_status', '$fp32_support', '$fp32_renew', $fp32_install)";

如果我在查询$ fp32_install中使用了一个空值就可以了,但是如果我使用'$ fp32_install',那么日期就会发生在这里,日期很好,但是一个NULL值就是1970年-01-01(可能是因为它将'NULL'视为字符串)

如果我回显$ fp32_install,则该值显示为2012-08-16,该列的SQL类型为date,默认值为NULL

2 个答案:

答案 0 :(得分:1)

如果您使用表单中的发布值,则$ _POST ['value']将不为NULL。

您应该检查空值。

if($_POST['value']=="")
{
    $value="NULL";
}
else 
{
    $value="'".date("Y-m-d",strtotime($_POST['value']))."'";
}

答案 1 :(得分:0)

根据您描述的行为,听起来好像您的DATE列是使用DEFAULT 0子句定义的,或者您提供的值无效。

根据MySQL文档:

<剪断>

无效的DATE,DATETIME或TIMESTAMP值将转换为相应类型的“零”值('0000-00-00'或'0000-00-00 00:00:00')。

< /剪断>

如果没有看到示例代码,很难诊断出确切的问题。作为入门者,我建议您尝试回显发送到数据库的SQL语句。

我强烈怀疑DATE列的值会在其周围显示引号,字符串值为'NULL',而不是裸关键字NULL