Php 在Mysql中显示创建日期
我以前问过类似的问题,但仍然没有得到有效的答案。 因此,我的数据库中有一个表,其中包含有关用户的第一个姓名、电子邮件。。。和2个包含creationcreated日期和UpdateUpdate日期的字段。 更新后的字段的类型为TIMESTAMP,默认值为CURRENT_TIMESTAMP,attributes为on CURRENT_TIMESTAMP。并且创建的字段的类型为datetime,而非null默认值为none。 问题是,当显示创建日期时,我在每个用户旁边看到0000-00-00:00:00。 以下是将用户添加到数据库的代码:Php 在Mysql中显示创建日期,php,mysql,Php,Mysql,我以前问过类似的问题,但仍然没有得到有效的答案。 因此,我的数据库中有一个表,其中包含有关用户的第一个姓名、电子邮件。。。和2个包含creationcreated日期和UpdateUpdate日期的字段。 更新后的字段的类型为TIMESTAMP,默认值为CURRENT_TIMESTAMP,attributes为on CURRENT_TIMESTAMP。并且创建的字段的类型为datetime,而非null默认值为none。 问题是,当显示创建日期时,我在每个用户旁边看到0000-00-00:00:
$first_name = trim($_REQUEST['first_name']);
$last_name = trim($_REQUEST['last_name']);
$username = trim($_REQUEST['username']);
$password = trim($_REQUEST['password']);
$email = trim($_REQUEST['email']);
$created = strftime("%Y-%m-%d %H:%M:%S", time());
$insert_sql = sprintf("INSERT INTO users (first_name, last_name, username, password, email, created)" .
"VALUES('%s', '%s', '%s', '%s', '%s', '%s');",
mysql_real_escape_string($first_name),
mysql_real_escape_string($last_name),
mysql_real_escape_string($username),
mysql_real_escape_string(crypt($password, $username)),
mysql_real_escape_string($email),
mysql_real_escape_string($created));
mysql_query($insert_sql) or die(mysql_error());
请帮忙,我尝试了各种功能,比如date,现在仍然不起作用
编辑:这就是我的表格显示的内容:
mysql> SELECT updated, created from users;
+---------------------+---------------------+
| updated | created |
+---------------------+---------------------+
| 2012-09-21 09:09:49 | 0000-00-00 00:00:00 |
| 2012-09-21 09:27:27 | 0000-00-00 00:00:00 |
| 2012-09-22 11:36:19 | 0000-00-00 00:00:00 |
| 2012-09-22 11:43:35 | 0000-00-00 00:00:00 |
+---------------------+---------------------+
您正在时间戳字段中输入字符串;相反,请使用。您的查询应该是:
"INSERT INTO `users` (
`first_name`,
`last_name`,
`username`,
`password`,
`email`,
`created`) VALUES (
'%s',
'%s',
'%s',
'%s',
'%s',
NOW())"
也可以考虑迁移到利用准备好的语句。
澄清意见;该字段的类型无关紧要,因为如果您现在给出该字段,MySQL将知道如何处理它: 如果尝试插入UNIX\u时间戳,则此操作无效:您能否检查这些记录的时间戳值是否为0000-00-00:00:00。 这是一个正常问题,如果您更改一个表,在MYSQL中创建列timestamp not null default CURRENT_timestamp,它会用时间戳0000-00-00:00:00更新以前的记录 解决方案是更新数据库记录,使其具有0000-00-00:00:00以外的值
希望有帮助 由于您的字段是时间戳,您需要输入:
我创建的字段是datetime。很抱歉,误读了它,如果是这样,@Burnkhalid给出的答案应该有效?OP明确地说它是一个datetime字段->,并且创建的字段的类型是type=datetime,所以你猜它是时间戳,对吗?它是什么类型并不重要;MySQL现在知道该怎么做了。这很奇怪,现在正常应该可以工作了,但事实就是这样。但是,当我输入phpmyadmin时,更新的字段存储准确的时间,而创建的字段存储零。使用“为表显示创建表”更新问题。键入“显示创建表用户”,然后粘贴输出。零告诉我您插入的是文字时间戳,而不是MySQL可以使用的正确类型。是的,记录在创建的字段中显示0000-00-00:00:00,但在更新的字段中显示的是准确的时间。那么您还好吗?当创建的字段为0000-00-00时,始终可以选择其他值?类似于选择IFcreated='0000-00-00 00:00:00','2010-01-01 00:00:00',创建为createdCheck this SQL-选择test.price,test.brid,选择iftest.timestamp='0000-00-00-00:00:00',现在选择test.timestamp作为测试时间;我的表是CREATE table test price int11 DEFAULT NULL,product varchar20 DEFAULT NULL,brid varchar20 DEFAULT NULL,timestamp timestamp NOT NULL DEFAULT CURRENT_timestamp。希望有帮助!我正在制作一份创建用户的文件副本-u-!现在很好。无论如何谢谢你的帮助。哈哈,我不相信自己。
mysql> create table temp (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, ts TIMESTAMP, dt DATETIME);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into temp values ('',NOW(),NOW()),('',NOW(),NOW());
Query OK, 2 rows affected, 2 warnings (0.08 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from temp;
+----+---------------------+---------------------+
| id | ts | dt |
+----+---------------------+---------------------+
| 1 | 2012-09-22 13:38:50 | 2012-09-22 13:38:50 |
| 2 | 2012-09-22 13:38:50 | 2012-09-22 13:38:50 |
+----+---------------------+---------------------+
2 rows in set (0.00 sec)
mysql> insert into temp values ('',UNIX_TIMESTAMP(),UNIX_TIMESTAMP());
Query OK, 1 row affected, 3 warnings (0.00 sec)
mysql> select * from temp order by id desc limit 1;
+----+---------------------+---------------------+
| id | ts | dt |
+----+---------------------+---------------------+
| 7 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
+----+---------------------+---------------------+
1 row in set (0.00 sec)
INSERT INTO users
(first_name, last_name, username, password, email, created)
VALUES('%s', '%s', '%s', '%s', '%s', UNIX_TIMESTAMP());