我搜索了该网站,虽然我找到了类似的问题和答案,但我无法找到答案。 经过4个小时的搜索,我决定咬紧牙关提出问题。
我在表单中有 4 个不需要的日期字段。 如果其中一个字段有条目,我希望它在数据库中输入日期,如果有的话,则为 null。
我有一个 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)";
如果我在查询中使用 $fp 32_install 一个空值就可以了,但一个日期进入为 0000-00-00,如果我使用"$fp 32_install",日期会很好,但 NULL 值进入为 1970-01-01(可能是因为它将"NULL"视为字符串)
如果我回显 $fp 32_install,则值显示为 2012-08-16,该列的 SQL 类型为 date,默认值为 NULL
如果您使用的是表单中已发布的值,则 $_POST['value'] 将不会为 NULL。
您应该改为检查空值。
if($_POST['value']=="")
{
$value="NULL";
}
else
{
$value="'".date("Y-m-d",strtotime($_POST['value']))."'";
}
从您描述的行为来看,听起来好像您的 DATE 列是用 DEFAULT 0
子句定义的,或者您提供了无效的值。
根据MySQL文档:
<剪>剪>
无效的日期、日期时间或时间戳值将转换为相应类型的"零"值("0000-00-00"或"0000-00-00 00:00:00")。
如果不查看示例代码,则很难诊断确切的问题。首先,我建议您尝试回显发送到数据库的 SQL 语句。
我强烈怀疑 DATE 列的值会出现引号,字符串值 'NULL'
,而不是裸关键字NULL
。