2012-08-16 108 views
1

我已经搜索了该网站,虽然我发现了类似的问题和答案,但我一直无法找到答案。经过4个小时的搜索后,我决定咬紧牙关,问问题。使用MySql在数据库中输入日期或空值

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

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

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

任何意见将非常感激

感谢迄今意见...

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

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一个空值进入就好,但日期进入作为0000-00-00,如果我使用'$ fp32_install'日期进行罚款,但NULL值作为1970-01-01进入(可能是因为它将'NULL'视为一个字符串)

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

+0

不会使用具有适当占位符的PDO来处理您的转义吗? – tadman 2012-08-16 16:06:44

+0

看来你在MySQL上的日期字段不允许为'NULL' – GusDeCooL 2012-08-16 16:06:50

+1

请在你的问题中包含你的代码。当我们看到代码示例时,回答起来要容易得多。 – kapa 2012-08-16 16:06:59

回答

1

如果您使用表单中的张贴值,则$ _POST ['值']不会为NULL。

您应该检查空值而不是。

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

谢谢你,这个伎俩 – tatty27 2012-08-16 17:23:19

0

从你描述的行为,听起来就好像你的DATE列与DEFAULT 0条款规定,或者您所提供的值无效。

根据MySQL文档:

<剪断>

无效的日期,DATETIME或TIMESTAMP值被转换为适当的类型的“零”值( '0000-00-00' 或'0000-00-00 00:00:00')。

< /剪断>

这是很难诊断确切的问题,没有看到示例代码。作为初学者,我建议您尝试回显正在发送到数据库的SQL语句。

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