在Mysql中显示创建日期

时间:2012-09-22 10:25:44

标签: php mysql

我之前曾问过类似的问题,但仍然没有找到合适的答案。 所以我在我的数据库中有一个表,其中包含有关用户的信息(first_name,email ...)和包含创建日期(“created”)和更新日期(“updated”)的2个字段。 “updated”字段的类型为TIMESTAMP,default =“CURRENT_TIMESTAMP”,attributs =“on Current_timestamp”。并且“created”字段的type =“datetime”而不是null default =“none”。 问题是当显示创建日期时,我在每个用户旁边“0000-00-00 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(),now()但仍然无效。

编辑:我的表格显示的内容:

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 |
+---------------------+---------------------+

3 个答案:

答案 0 :(得分:0)

您正在时间戳字段中输入字符串;而是使用mysql function NOW()。您的查询应该是:

"INSERT INTO `users` (
     `first_name`,
     `last_name`,
     `username`,
     `password`,
     `email`,
     `created`) VALUES (
            '%s',
            '%s',
            '%s',
            '%s',
            '%s',
            NOW())"

另外,请考虑迁移到mysqli以利用预先准备的语句。​​

澄清评论;这个字段的类型无关紧要,因为如果你给它NOW(),MySQL会知道如何处理它:

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)

如果您尝试插入UNIX_TIMESTAMP()

,它将无效
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)

答案 1 :(得分:0)

您可以检查记录是否有0000-00-00 00:00:00作为其时间戳值。
如果您更改表格create column timestamp (not null default CURRENT_TIMESTAMP) in MYSQL,则会更新之前的记录,时间戳为0000-00-00 00:00:00,这是正常问题。

解决方案是更新数据库记录,使其具有0000-00-00 00:00:00

以外的值

希望有所帮助!

答案 2 :(得分:0)

由于您的字段是时间戳,因此您需要输入timestamp

INSERT INTO users 
    (first_name, last_name, username, password, email, created)
    VALUES('%s', '%s', '%s', '%s', '%s', UNIX_TIMESTAMP());