preload
3月 13

タイトルわかりにくいけど、検索されそうなキーワードを並べてみた。

またEthnaでADOdbするときのTIPS。カラムがいっぱいあるテーブルへのinsertは、

$db->execute(“insert into hogetable(‘foo’, ‘bar’) values(?, ?)”, array(“FOO”, “BAR”));

よりか、

$array = array(‘foo’ => ‘FOO’, ‘bar’ => ‘BAR’);
$db->autoExecute(‘hogetable’, $array, ‘INSERT’);

みたくautoExecuteにした方が見ためにもメンテ的にもよい。でも、これだと

$db->execute(“insert into hogetable(‘foo’, ‘time_stamp’) values(?, now())”, array(“FOO”));

みたく、タイムスタンプが拾えない。というか、now() とかしちゃうと MySQL 固定になっちゃう。autoExecute しながら DB タイムスタンプ(現在日時)をさくっと突っ込みたい。

解決法。

$array = array(‘foo’ => ‘FOO’, ‘time_stamp’ => $db->db->Time());
$db->autoExecute(‘hogetable’, $array, ‘INSERT’);

などと、$db->db->Time() で拾ってやればよい。

ここに至った経緯。
ADOdb邦訳マニュアルによれば、

ADOConnectionフィールド

-中略-

sysTimeStamp:現在のタイムスタンプ/日付時刻の値を取得するため呼び出すデータベース関数名を保持する文字列。

ということで、$db->db->sysTimeStamp で MySQL 接続時に NOW() が取得できていることを確認。この結果をうまく使ってるところは無いかと、ADOdbのPHP実装をgrep。adodb.inc.php中で発見。

取得できるのはUnixTimeStampなんだが、MySQLに突っ込んだらそのまま受け取ってくれた。


関連していそうなエントリ:

Leave a Reply