使用MySQL / PHP在一个字段中使用now()插入当前date/时间

由于MySQL显然不能自动插入函数now()在date时间字段添加新的logging像其他一些数据库,基于评论,我明确地试图插入它使用SQL语句。 (人们似乎认为时间戳curdate()不是由于时间戳的各种限制的答案)。网上有很多文章build议插入now()使用SQL应该工作。

当我尝试插入date时间使用SQL语句,但是,该字段不填充当前时间/date,但它只给我默认0000-00-等这可能是一个语法错误,但它是让我疯狂,所以我张贴它。

mysql_query("INSERT INTO users (first, last, whenadded) VALUES ('$first', '$last', now())"; 

它插入的第一个和最后一个,但没有什么添加,离开的时候,等等在whenadded领域。

字段types是date时间,它没有sorting规则,属性,空默认或额外。 顺便说一句,我试图把现在()单引号…它抛出了一个错误。

NOW()通常在SQL语句中工作并返回date和时间。 检查您的数据库字段是否具有正确的types(date时间)。 否则,你总是可以使用PHP的 date()函数并插入:

 date('Ymd H:i:s') 

但我不会推荐这个。

您忘记closuresmysql_query命令:

mysql_query("INSERT INTO users (first, last, whenadded) VALUES ('$first', '$last', now())" ;

请注意最后一个括号。

就像佩卡说的那样,它应该以这种方式工作。 我不能用这个独立的例子重现问题:

 <?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版本中。

我能想到的唯一原因就是你将它作为string'now()' ,而不是函数now()
或者其他任何错字。

 SELECT NOW(); 

看它是否返回正确的值?

现在()

为我工作。 但是我的字段types只是date ,你的是date时间 。 我不确定情况是否如此

这些对我来说都很好…

 <?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); ?> 

附注:mysql_query()不是在当前版本的PHP中连接到MySQL的最佳方式。

什么关于SYSDATE()?

 <?php $db = mysql_connect('localhost','user','pass'); mysql_select_db('test_db'); $stmt = "INSERT INTO `test` (`first`,`last`,`whenadded`) VALUES ". "('{$first}','{$last}','SYSDATE())"; $rslt = mysql_query($stmt); ?> 

查看NOW(),SYSDATE()和CURRENT_DATE()在MySQL中的差异,以获取更多关于NOW()和SYSDATE()的信息。