就像Pekka說的那樣,它應該以這種方式工作。我不能與此自足例如重現該問題:
<?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
而這裏的(幾乎)使用時間戳字段和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";
}
方便地將時間戳轉換爲與第一個示例中相同的日期時間字符串表示 - 至少在我的PHP/PDO/mysqlnd版本中。
奇怪的是,你顯示的應該工作。你確定這是一個適當的DATETIME字段嗎?無論如何,評論是不正確的,你可以自動完成這一使用'DEFAULT CURRENT_TIMESTAMP'和'ON UPDATE CURRENT_TIMESTAMP' http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html – 2012-03-23 14:57:53
又能怎樣工程TIMESTAMP(CURRENT_TIMESTAMP)也適用於Datetime? http://bugs.mysql.com/bug.php?id=27645由於人們將其描述爲日期限制,因此我們迴避時間戳。將嘗試重置字段類型 – user1260310 2012-03-23 15:34:01
呃,我的錯誤。抱歉。這確實似乎只適用於TIMESTAMP字段,這是一個恥辱。但是,上面顯示的查詢*應該*工作 – 2012-03-23 15:39:42