【问题标题】:Enter either a date or a null value in database using MySql使用 MySql 在数据库中输入日期或空值
【发布时间】:2012-08-16 16:03:22
【问题描述】:

我已经搜索了该网站,虽然我找到了类似的问题和答案,但我无法找到答案。经过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)";

如果我在查询 $fp32_install 中使用空值,但日期为 0000-00-00 -01-01(可能是因为它把 'NULL' 看作一个字符串)

如果我 echo $fp32_install 值显示为 2012-08-16 并且该列的 SQL 类型是 date 并且默认是 NULL

【问题讨论】:

  • 不会使用带有适当占位符的 PDO 为您处理转义吗?
  • 您在 MySQL 上的日期字段似乎不允许 NULL
  • 请在问题中包含您的代码。看到代码示例就容易回答了。
  • 您的 MySQL 列是否允许为 NULL 或是否具有 NOT NULL 标志?
  • if($value=="") $value="NULL";否则 $value="'".date("Y-m-d",strtotime($value))."'"; // 注意日期周围的引号,而不是 NULL

标签: php mysql


【解决方案1】:

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

您应该改为检查空值。

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

【讨论】:

    【解决方案2】:

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

    根据 MySQL 文档:

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

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

    我强烈怀疑 DATE 列的值将出现在其周围带有引号的字符串值 'NULL',而不是裸关键字 NULL

    【讨论】:

      猜你喜欢
      • 2019-01-20
      • 2020-08-11
      • 2018-11-19
      • 2014-11-19
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 2017-06-25
      相关资源
      最近更新 更多