【问题标题】:Date in My SQL always 0000-00-00My SQL 中的日期始终为 0000-00-00
【发布时间】:2013-02-27 00:02:37
【问题描述】:

我一直在撕扯我的头发和向众神献祭 - 尽我所能做功课但我遇到了与这里的其他两个帖子相同的问题,这两个帖子似乎都没有解决

Properly formatted MySQL date insert statement returns all 0's

MYSQL Date field always outputs 0000-00-00

当我回显时,我得到格式正确的值我使用的是日期而不是 DATETIME MySQL 在日期之前正确输入了一个名称,但随后也输入了一个空白的 longblob(图片) - 似乎它只是输入一个字段或以某种方式我没有正确设置MySQL或其他什么?

我的代码是

catch(PDOException $e)
    {
    echo "Im sorry dave I cant do that";
    echo $e->getMessage();
    }

        //*next bit is to insure that if connection is lost database is not  
   partially updated-I think-
        //* $DBHandle->beginTransaction();

        $firstnameOBS= $_POST['touristfirstname'];
        $todaysdateOBS= $_POST['touristdatetoday'];
        $picturenow= $_POST['picturesubmitted'];

        $JSONfirstname = json_encode($firstnameOBS);
        $JSONtodaysdate = json_encode($todaysdateOBS);
        $JSONpicturenow = json_encode($picturenow);
        echo $JSONtodaysdate ;

        //* Below is the send from PHP page to My Sql Server -
                //*  JSON encode here 

    try {    
        $senditin = $DBHandle->prepare("INSERT INTO 
    `Observations`.`fkarnd`(`firstname`,`datetoday`,`picturesubmitted`) VALUES   
 (:firstname 
    , :datetoday ,:picturesubmitted)", array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

        //* $senditin->bindValue(':firstname', $JSONfirstname, PDO::PARAM_STR);
        //* $senditin->bindValue(':datetoday', $JSONtodaysdate, PDO::PARAM_STR);
        //* $senditin->bindValue(':picturesubmitted', $JSONpicturenow,
     PDO::PARAM_LOB);

        //* $myinputarray = array('firstname'=> $JSONfirstname, 'datetoday' => 
    $JSONtodaysdate, 'picturesubmitted' => $JSONpicturenow );

        $DBHandle->beginTransaction();
        $senditin->execute(array('firstname'=> $JSONfirstname, 'datetoday' => 
    $JSONtodaysdate, 'picturesubmitted' => $JSONpicturenow ));
        //* commit allows transaction begun to complete
        $DBHandle->commit();

     }  

    catch ( PDOException $e ) {
      echo "I'm sorry, I can't do that Dave......";
      file_put_contents( 'dbErrors.txt', $e->getMessage(), FILE_APPEND );   
        //* rollback function call here? a nasty exception has appeared,      
     }
        echo "<br>"."successful submission";
        $DBHandle = null;

     ?>

【问题讨论】:

  • 调用json_encode() 之前的值是多少?这可能会返回一个带引号的字符串,它不是日期,并且将被强制转换为 0,从而导致所有日期为零。您对这些值中的任何一个调用 json_encode() 的原因是什么?
  • 你的数据库行的数据类型是什么?
  • 你的意思是JSON编码会改变数据类型?在 JSON 编码之前和之后的回声看起来是一样的(主要是我认为,因为为了让事情正常工作,我正在输入数据 yyyy-mm-dd 并且我使用 2002 02 02 所以如果月份和年份被转置它就可以了。
  • 字段数据类型为DATE
  • 调用 JSON 编码来避免可能的注入

标签: php mysql json


【解决方案1】:

您的意思是改为调用 json_decode($todaysdateOBS) 吗?看起来这可能是问题的根源,因为 json_encode 将尝试以 json 格式编码您发送给它的任何内容,这不是 sql (http://php.net/manual/en/function.json-encode.php) 中的有效日期字段。

【讨论】:

  • 我正在尝试将数据输入到数据库中,因此我在提交到数据库之前对数据进行了编码。如果我把它拉出来,我会使用解码?我将尝试将 MySQL DB 字段从 DATE 类型更改为字符串?但这似乎与我使用 JSON 的原因背道而驰……?
  • 如果你对mysql db使用字符串类型是有意义的。但你当然会失去内置的日期时间功能
  • OK 关闭这条小狗 - 谢谢各位 - 没有 JSON 可以正常工作.... 将不得不以另一种方式解决这个问题。谢谢
  • @DPR-treasureisland 你必须批准一个接受的答案,这就是帖子被关闭的方式
猜你喜欢
  • 1970-01-01
  • 2013-06-09
  • 2018-12-19
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 2017-09-21
相关资源
最近更新 更多