Zend_Db_Expr NOW() не работает?

Я пробую простую вставку:

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

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

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

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

Обновить

Используя 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
)

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

Обновление 2: Неважно, у меня все работает. Проблема была совсем в другом.


person Sejanus    schedule 08.02.2011    source источник
comment
Попробуйте отладить (например, распечатать) SQL-запрос   -  person Distdev    schedule 08.02.2011
comment
относительно вашего обновления: пожалуйста, опубликуйте, в чем проблема на самом деле была. Это поможет будущим пользователям.   -  person Aron Rotteveel    schedule 09.02.2011


Ответы (1)


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

Поскольку это не так, вам следует использовать профилировщик для отладить запрос:

$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);
person Aron Rotteveel    schedule 08.02.2011
comment
Спасибо! Немного погуглив, я выяснил, что это должно быть $db = $this->getDbTable()->getAdapter(); потому что Zend_Db_Table не имеет метода getProfiler(). Во всяком случае, как только я заработал, профилировщик запросов, похоже, в порядке :( - person Sejanus; 08.02.2011
comment
Очень странно. Вы пытались изменить столбец даты и времени на столбец даты или текста? Интересует, какие данные на самом деле пытаются вставить. В крайнем случае, вы можете вставить его вручную, хотя это действительно не решение: date("Y-m-d H:i:s") - person Aron Rotteveel; 08.02.2011