0

我之前问过一个类似的问题,但仍然没有得到有效的答案。所以我在我的数据库中有一个表,其中包含有关用户的信息(名字,电子邮件...)和 2 个字段,其中包含创建日期(“创建”)和更新日期(“更新”)。“更新”字段的类型为 TIMESTAMP ,默认为 ="CURRENT_TIMESTAMP",属性 ="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 |
+---------------------+---------------------+
4

3 回答 3

0

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

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

此外,考虑迁移以mysqli利用准备好的语句。

澄清评论;该字段的类型无关紧要,因为如果您给出它,MySQL将知道如何处理它NOW()

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)
于 2012-09-22T10:31:23.113 回答
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

希望有帮助!

于 2012-09-22T10:31:26.577 回答
0

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

INSERT INTO users 
    (first_name, last_name, username, password, email, created)
    VALUES('%s', '%s', '%s', '%s', '%s', UNIX_TIMESTAMP());
于 2012-09-22T10:33:13.570 回答