いい事書いてある。めも
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でいいんだ