2011-02-08 2 views
3

Я пытаюсь простую вставку:Zend_Db_Expr СЕЙЧАС() не работает?

$data = array 
(
'whatever' => 'nevermind', 
'etc' => 'more data', 
'updated_on' => new Zend_Db_Expr('NOW()') 
); 

$this->getDbTable()->insert($data); 

Все получает вставлена ​​правильно, но updated_on равна нулю. Я делаю что-то неправильно? Я понимаю, что может быть нелегко определить проблему из того, что я сказал, но, возможно, вы могли бы предложить хотя бы, как мне отладить это? Заранее спасибо

p.s. база данных - mySQL, а столбец DATETIME, и если я подключаюсь к mySQL и вручную пытаюсь вставить или обновить NOW(), это сработает.

Update

Используя Profiler, я получаю следующий результат:

INSERT INTO `db_table` (`column1`, `column2`, `column3`, `column4`, `column5`, `column6`, `column_datetime`, `column7`) VALUES (?, ?, ?, ?, ?, ?, NOW(), ?) 

Array 
(
    [1] => column1 data 
    [2] => column2 data 
    [3] => column3 data 
    [4] => column4 data 
    [5] => column5 data 
    [6] => column6 data 
    [7] => column7 data 
) 

Насколько мне известно, все в порядке здесь: \

UPDATE2: Nevermind, я получил это работает. Проблема была совершенно иной.

+0

Попробуйте отладки (например, печать) SQL-запрос – Distdev

+1

относительно вашего обновления: пожалуйста, напишите, в чем проблема фактически * был *. Это поможет будущим пользователям. –

ответ

7

Основываясь исключительно на коде, который вы публикуете, это должно работать.

Поскольку это не так, вы должны использовать profiler для отладки запрос:

$db = $this->getDbTable(); 
$adapter = $db->getAdapter(); 
$adapter->getProfiler()->setEnabled(true); 
$data = array 
(
    'whatever' => 'nevermind', 
    'etc' => 'more data', 
    'updated_on' => new Zend_Db_Expr('NOW()') 
); 
$db->insert($data); 
print $adapter->getProfiler()->getLastQueryProfile()->getQuery(); 
print_r($adapter->getProfiler()->getLastQueryProfile()->getQueryParams()); 
$adapter->getProfiler()->setEnabled(false); 
+0

Спасибо! С небольшим количеством поисковых запросов я выяснил, что это должно быть $ db = $ this-> getDbTable() -> getAdapter(); потому что Zend_Db_Table не имеет метода getProfiler(). Во всяком случае, как только я его обработал, профайлер запроса напечатан, кажется, в порядке :( – Sejanus

+1

Очень странно. Вы пытались отредактировать столбец datetime столбцу даты или текста? Интересует то, что данные на самом деле пытаются вставить. меру, вы можете вставить ее вручную, хотя это не * действительно * решение: 'date (" Ymd H: i: s ")' –

Смежные вопросы