2012-07-03 4 views
2

У меня есть таблица с полем:Обновление MySQL временной метки

'LAST_MODIFIED - метка времени NOT NULL'

  • Я установить значение по умолчанию для текущего времени. Однако это работает только при обновлении или вставке из phpMyAdmin, а не из моего скрипта.

Я попытался

$sql = sprintf("UPDATE %s SET timestamp=now(), %s WHERE id='%s'", $table, $implodeArray, $_POST['id']); 

и это все еще не кажется, работает. Как я могу сделать обновление timestamp при обновлении или вставке таблицы из сценария?

Также Heres образец вывода скриптов:

UPDATE о SET метки времени = сейчас(), page_header = 'Заголовок страницы идет здесь', sub_header = 'Sub заголовок идет здесь', content_short = «Это где короткое описание о странице идет, содержание = „Здесь полное содержание описание идет“ WHERE ID = „1“

+0

сделать а не 'timestamp = now()' в вашем запросе, если вы установили его значение по умолчанию в текущую временную метку. – manurajhada

+0

так удалить значение по умолчанию, и оно должно работать? – Alex

+1

@juergen thats сообщение microsoft. не совсем то же самое ...? – Alex

ответ

7

Может быть, я неправильно, но ваше имя столбца LAST_MODIFIED (набранный метка времени), так что запрос должен быть:

UPDATE about SET last_modified=now(), 
page_header = 'Page header goes here', 
sub_header = 'Sub header goes here', 
content_short = 'This is where a short description of the about page goes', 
content = 'This is where the full content description goes' 
WHERE id='1' 
+0

Пытался использовать сейчас(), но только сохраняет дату –

1

если вы используете reserved word в качестве стола или ColumnName, то вам нужно цитата это

$sql = sprintf("UPDATE %s SET `timestamp`=now(), %s WHERE id='%s'", $table, $implodeArray, $_POST['id']); 

в этом случае вы использовали метку времени в качестве ColumnName так что вам необходимо процитировать его

Чтобы обновить временные метки автоматически вы можете полагаться на самом MySQL, если у вас есть только 1 столбец временной метки, или вы можете добавить ON UPDATE CURRENT_TIMESTAMP при определении вашей колонки метки времени, для получения дополнительной информации см TIMESTAMP initialisation

+0

имя столбца last_modified ... – Alex

+0

MySQL разрешает 'TIMESTAMP' как некотируемый идентификатор. См. Http://dev.mysql.com/doc/refman/5.5/ru/reserved-words.html. – eggyal

+0

да что я и подумал – Alex

0

Если вы хотите обновлять временную метку каждый раз, когда что-то происходит с записью (т. последняя измененная дата/время), тогда лучше оставить его для БД. Вы не можете полагаться на значение по умолчанию в определении поля, потому что оно будет работать только на INSERT (когда создается запись/поле), используйте SET last_modified = GETDATE() [или GETUTCDATE()] Фактические функции могут различаться в зависимости от вашего фактический SQL-сервер.

И «Иван Буттинони» абсолютно прав, и никто, включая меня, не заметил его раньше - ваше имя поля неверно, но приведенные выше комментарии по-прежнему применяются.

0

Если у вас есть что-то вроде рамки, что не позволяет «сейчас()» это поле - просто сделать поле НЕ (поле модели->) NULL и установить переменную PHP обнулить только перед сохранением ..

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