就像佩卡说的那样,它应该以这种方式工作。 我不能用这个独立的例子重现问题:
<?php $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->exec(' CREATE TEMPORARY TABLE soFoo ( id int auto_increment, first int, last int, whenadded DATETIME, primary key(id) ) '); $pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,1,Now())'); $pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,2,Now())'); $pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,3,Now())'); foreach( $pdo->query('SELECT * FROM soFoo', PDO::FETCH_ASSOC) as $row ) { echo join(' | ', $row), "\n"; }
哪(当前)打印
1 | 0 | 1 | 2012-03-23 16:00:18 2 | 0 | 2 | 2012-03-23 16:00:18 3 | 0 | 3 | 2012-03-23 16:00:18
这里是(几乎)使用TIMESTAMP字段和DEFAULT CURRENT_TIMESTAMP的相同脚本:
<?php $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly'); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->exec(' CREATE TEMPORARY TABLE soFoo ( id int auto_increment, first int, last int, whenadded TIMESTAMP DEFAULT CURRENT_TIMESTAMP, primary key(id) ) '); $pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,1)'); $pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,2)'); sleep(1); $pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,3)'); foreach( $pdo->query('SELECT * FROM soFoo', PDO::FETCH_ASSOC) as $row ) { echo join(' | ', $row), "\n"; }
方便的是,时间戳被转换成与第一个例子中相同的date时间string表示 – 至less在我的PHP / PDO / mysqlnd版本中。