使用php cause 0000-00-00/00:00:00将空日期/时间插入到mysql中

Jaz*_*zzy 2 php mysql string null datetime

我在这里和其他地方看到了一些问题,在某些情况下会解决这个问题,但不是我需要的问题.

我正在使用一个脚本,该脚本存储一组值,以根据更改执行插入或更新.

设置了一些日期/时间,有些日期/时间为空.我正在尝试使用$ var = NULL,然后使用insert插入...('{$ var}')并获得00:00:00的时间(如果为null)和时间(如果设置了时间).

插入$ var ="NULL"并插入...('{$ var}')并获得00:00:00(如果为null)和时间(如果设置了时间).

如果我删除插入的引号...({$ var})它的作用是null,但是如果日期不是null,它当然会失败.

我有另一个VARCHAR字段我正在做同样的事情,它工作正常.即如果有一个字符串,它作为一个字符串传入,如果它是空的,我设置var = null.我在插入查询上使用引号,如果它为null,则为null,如果不为null,则插入字符串.

使用条件语句将需要相当大的重写,所以我希望避免这种情况.

关于如何在没有IF语句(如果可能)的情况下完成这项工作的任何建议都会有所帮助.

谢谢.


我已经测试了这几种方式,如果没有制作日期/时间字段VARCHAR,我无法获得所需的结果,我不想这样做.这是db结构,插入查询和结果.

id  int(11)         No  None    AUTO_INCREMENT                          
event_new_date_start    date            Yes NULL                                
event_new_time_start    time            Yes NULL                                
event_link  varchar(150)    latin1_swedish_ci       Yes NULL    




    $event_new_date_start1 = 'NULL';
    $event_new_time_start1 = 'NULL';
    $event_link1 = 'NULL';
    $event_new_date_start2 = '2011-04-04';
    $event_new_time_start2 = '13:13';
    $event_link2 = 'http://abc.com';
    $event_new_date_start3 = NULL;
    $event_new_time_start3 = NULL;
    $event_link3 = NULL;

    mysql_query("
    insert into test_dates (event_new_date_start, event_new_time_start, event_link) values
    ('{$event_new_date_start1}', '{$event_new_time_start1}', '{$event_link1}')
    ");

    mysql_query("
    insert into test_dates (event_new_date_start, event_new_time_start, event_link) values
    ('{$event_new_date_start2}', '{$event_new_time_start2}', '{$event_link2}')
    ");

    mysql_query("
    insert into test_dates (event_new_date_start, event_new_time_start, event_link) values
    ('{$event_new_date_start3}', '{$event_new_time_start3}', '{$event_link3}')
    ");                          


        1   0000-00-00  00:00:00    NULL
        2   2011-04-04  13:13:00    http://abc.com
        3   0000-00-00  00:00:00
Run Code Online (Sandbox Code Playgroud)

当我将日期/时间字段更改为CHAR时,它使用查询中的引号按预期工作.

        4   NULL    NULL    NULL
        5   2011-04-04  13:13   http://abc.com
        6            
Run Code Online (Sandbox Code Playgroud)

rid*_*rid 5

如果你正在使用引号,那么你说你希望日期是字符串'NULL'.MySQL无法将其解析为有效日期,因此它会回退到0.

设置值时$var,将其设置为just NULL或带引号的字符串(如果它不为null),则只需({$var})在查询中使用而不是('{$var}').