由于MySQL显然不能像其他一些数据库那样在添加新记录时自动在日期域中插入函数now(),根据评论,我明确地试图使用SQL语句来插入它。(由于时间戳的各种限制,人们似乎认为用curdate()的时间戳不是答案)。网络上有许多文章建议使用SQL插入now()应该可以。
然而,当我试图使用SQL语句插入日期时间时,该字段并没有弹出当前的时间/日期,而是只给我默认的0000-00-,等等。这可能是一个语法错误,但它让我抓狂,所以我把它贴出来。
mysql_query("INSERT INTO users (first, last, whenadded) VALUES ('$first', '$last', now())";
它插入了首字母和尾字母,但没有插入添加时间,在添加时间栏中留下了0000-00-00等。
这个字段的类型是数据时间,它没有整理、属性、空默认或额外。BTW,我试着把now()放在单引号里......它出现了一个错误。
就像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
而这里是(几乎)同样的脚本,使用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";
}
方便的是,时间戳被转换为与第一个例子中相同的日期字符串表示--至少在我的PHP/PDO/mysqlnd版本中是如此。
这两种方法对我来说都很好用...
<?php
$db = mysql_connect('localhost','user','pass');
mysql_select_db('test_db');
$stmt = "INSERT INTO `test` (`first`,`last`,`whenadded`) VALUES ".
"('{$first}','{$last}','NOW())";
$rslt = mysql_query($stmt);
$stmt = "INSERT INTO `users` (`first`,`last`,`whenadded`) VALUES ".
"('{$first}', '{$last}', CURRENT_TIMESTAMP)";
$rslt = mysql_query($stmt);
?>
题外话:在当前版本的PHP中,mysql_query()不是连接MySQL的最佳方式。