我之前曾问过类似的问题,但仍然没有找到合适的答案。 所以我在我的数据库中有一个表,其中包含有关用户的信息(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 |
+---------------------+---------------------+
答案 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());