mysqlのtimestamp型を使って更新日時と生成日時の両方を記録する

いい事書いてある。めも

CREATE TABLE `test` (
id int(4) unsigned NOT NULL auto_increment,
name varchar(10) ,
.
.

.
.
modified_date timestamp NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
create_date timestamp NOT NULL default ‘0000-00-00 00:00:00’,
PRIMARY KEY (id)
);
[参考]
http://isoldeblog.blog93.fc2.com/blog-entry-14.html

キモは

create_date timestamp NOT NULL default ‘0000-00-00 00:00:00’

この書き方。属性はNOT NULLにしないとうまくいかないっぽい。

あと、この場合CURRENT_TIMESTAMPをcreate_dateのカラムで書こうとしてもテーブル内に2つ以上CURRENT_TIMESTAMPがある場合はエラーになってCREATE TABLEが出来ないので注意。

で、次にINSERTの方法。

INSERT INTO test ( name , create_date ) VALUES ( ‘foo’ , NULL );

のようにINSERT時にわざとNULLをセットする事で現在日時がセットされることになる。(ちなみにmodified_dateは何もしなくても DEFAULT が CURRENT_TIMESTAMP と明示してあるのでそのように振舞ってくれます^^)

で、本当なら話はここで終わるんだけど、アタシの場合はPEAR::DBのautoExecuteなどをよく使っているのでその時に、はたと困った。

autoExecuteの挿入値の配列は基本的にリテラルである必要があるはず。NULLってどうやって渡すの??

あれこれ試した結果

$con = new DB;
$db = $con->connect(_DSN);
$DATA=array( ‘name’ => ‘foo’ , ‘create_date’ => null );
$result = $db->autoExecute(“test”, $DATA, DB_AUTOQUERY_INSERT);

見たいな書き方でいいことが判明。
なぁ〜んだ。phpの定数のNULLでいいんだ