2010-01-03 106 views
2

我在我的MySQL數據庫中保存日期時遇到問題。 要測試一切:日期不保存在mysql數據庫中

我想保存2010-01-01(例如)在MySQL數據庫中。 首先,我將MySQL字段設置爲日期。這沒有奏效。但是,當我將字段設置爲字符串類型時,它會在數據庫中保存日期。

爲什麼當我想將日期保存到日期字段時它不起作用?

儘管我認爲代碼在這裏並不重要,但我會在發佈請求後發佈它。

我使用ZF 1.9.6

class JS_Form_EventForm extends ZendX_JQuery_Form{ 

    public function init($options=null){ 
     //parent::__construct($options); 

     $this->setName("newEvent"); 
     $this->addElementPrefixPath('JS_Validate','JS/Validate/','validate');  
     //naam 
     $evtName = new Zend_Form_Element_Text("evt_name"); 
     $evtName->setLabel("Evenement Naam: ") 
       ->setRequired(true); 
     // omschrijving 
     $evtDescription = new Zend_Form_Element_Textarea("evt_description",array("rows"=>6,"cols"=>25)); 
     $evtDescription->setLabel("Evenement omschrijving: "); 

     // locatie 
     $evtAdr = new Zend_Form_Element_Select("adr_id"); 
     $evtAdr->setLabel("Locatie: "); 
     $locaties = $this->getLocations(); 
     $evtAdr->setMultiOptions($locaties); 

     $newAdr = new Zend_Form_Element_Button("new_adr"); 
     $newAdr->setLabel("+"); 
     // begin datum 
     $evtStartDate = new ZendX_JQuery_Form_Element_DatePicker("evt_startdate",array("label"=> "Begin Datum")); 
     $evtStartDate->setJQueryParam('dateFormat', 'dd-mm-yy'); 
     $evtStartDate->addValidator(new Zend_Validate_Date('dd-mm-YYYY')); 

     // eind datum 
     $evtEndDate = new ZendX_JQuery_Form_Element_DatePicker("evt_enddate",array("label"=> "Eind Datum")); 
     $evtEndDate->setJQueryParam('dateFormat', 'dd-mm-yy'); 
     $evtEndDate->addValidator(new Zend_Validate_Date('dd-mm-YYYY')); 
     $evtEndDate->addValidator('CompareDates',false,array('evt_startdate')); 

     // begin tijd 
     $evtStartTime = new Zend_Form_Element_Text("evt_starttime"); 
     $evtStartTime->setLabel("Begin Tijd"); 
     $evtStartTime->addValidator(new Zend_Validate_Date('hh:mm',new Zend_Locale('auto'))); 

     // eind tijd 
     $evtEndTime = new Zend_Form_Element_Text("evt_endtime"); 
     $evtEndTime->setLabel("Eind tijd"); 
     $evtEndTime->addValidator(new Zend_Validate_Date('hh:mm')); 
     // aantal personen 
     $amountPersons = new Zend_Form_Element_Text("evt_amtpersons"); 
     $amountPersons->setLabel("Aantal personen nodig "); 

     $save = new Zend_Form_Element_Submit("save"); 
     $save->setLabel("Opslaan"); 


     $this->addElements(array($evtName,$evtDescription,$evtAdr,$newAdr,$evtStartDate,$evtEndDate,$evtStartTime,$evtEndTime,$amountPersons,$save)); 
     $this->setMethod('post'); 
     $this->setAction(Zend_Controller_Front::getInstance()->getBaseUrl().'/events/add'); 


    } 

保存數據:

public function addAction() 
    { 
     // action body 
       $form = new JS_Form_EventForm(); 
       if(!$this->getRequest()->isPost()){ 
        $this->view->form = $form; 
       }else{ 
        $formdata = $this->_request->getPost(); 
        if(!$form->isValid($formdata)){ 
         $this->view->form = $form; 
        }else{ 

         //http://zendgeek.blogspot.com/2009/07/zend-framework-building-complete.html 
         unset($formdata['save']); 
         $formdata['evt_name'] = ucfirst($formdata['evt_name']); 
         $e = new JS_Model_events(); 
         $e->insert($formdata); 
         if($e ==true){ 

          $this->_redirect('events/list'); 
         }else{ 

          echo 'Iets gaat niet goed'; 
         } 
         /* 
         $formdata['sts_id'] = 1; 
         $eventsTable = new JS_Model_DbTable_events(); 
         $eventsTable->insert($formdata); 
         */ 
         die(); 
         // form valid process data 
        } 
       } 
    } 

class JS_Model_DBTable_Events extends Zend_Db_Table_Abstract{ 

    protected $_name = 'events'; 

    public function remove($id){ 
     if(isset($id)){ 
      $where = $this->getAdapter()->quoteInto('evt_id = ?', $id); 
      return($this->delete($where)); 
     }else{ 
      return false; 
     } 
    } 

    /* 
    * function selectOne 
    * @param int id the id of the event to select 
    * @return resultset. 
    */ 
    public function selectOneRow($id){ 

     //$where = $this->getAdapter()->quoteInto('evt_id = ?', $id); 
     //$query = $this->select($where); 
     //$result= $this->fetchRow($query); 

     $select = $this->select(); 
     $select->where('evt_id = ?', $id); 
     $rows = $this->fetchAll($select); 

     return($rows); 

    } 

} 
+3

你的代碼在哪裏? – 2010-01-03 18:41:04

+2

發佈您的查詢 - 這可能與您如何引用日期有關? – 2010-01-03 18:42:06

+0

@adam無法發佈de查詢,因​​爲我使用zend_db_table_abstract insert($ where)。當我想要做$ result = $ e-> insert($ where)並打印$ result時,我只是得到整數,但它不打印查詢。 – sanders 2010-01-03 18:59:19

回答

3

我猜想這是你的問題的原因:

$evtStartDate->addValidator(new Zend_Validate_Date('dd-mm-YYYY')); 

MySQL不瞭解格式爲dd-mm-YYYY的日期文字。 MySQL瞭解YYYY-MM-DDYY-MM-DD以及其他一些變體。

請參閱http://dev.mysql.com/doc/refman/5.1/en/datetime.html以獲取有關接受日期字面格式的官方文檔。


回覆評論:您可以轉換日期在PHP代碼,否則你可以插入使用MySQL的STR_TO_DATE()功能的表達。傳遞一個Zend_Db_Expr對象來代替字面值。

$startdate_expr = $this->getAdapter()->quoteInto("STR_TO_DATE(?, '%d-%m-%Y')", 
    $formdata["evt_startdate"]); 
$formdata["evt_startdate"] = new Zend_Db_Expr($startdate_expr); 

$enddate_expr = $this->getAdapter()->quoteInto("STR_TO_DATE(?, '%d-%m-%Y')", 
    $formdata["evt_enddate"]); 
$formdata["evt_enddate"] = new Zend_Db_Expr($enddate_expr); 

$e->insert($formdata); 

或者你可以改變你的web應用程序的形式,要求日期是YYYY-MM-DD格式,然後你沒有任何東西轉換。

+0

你的意思是說我必須在我的代碼中進行日期轉換嗎? – sanders 2010-01-03 19:11:12