1

我在用户表中添加了一个新行,以显示每个用户的创建日期。我为此尝试了时间戳和日期时间类型,但它仍然在每个用户旁边显示 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());

这是显示信息的代码

$select_users = "SELECT * FROM users";
$result =  mysql_query($select_users);
while ($user = mysql_fetch_array($result)) {
$user_row = sprintf(
"<td><input type='checkbox' name='checkbox[]' id='checkbox[]' value='%d'/></td>" .
"<td>%s %s</td> " .
"<td>%s</td>" .
"<td><a href='mailto:%s'>%s</a></td> " .
"<td>%s</td>" .
"<td><a href='javascript:delete_user(%d);'><img class='delete_user' src='images/trash.png' alt='' title='' border='0' /></a></td>",
$user['user_id'], $user['first_name'], $user['last_name'], $user[username],
$user['email'], $user['email'], $user['created'], $user['user_id']);
echo $user_row;

除了显示 0000-00-00 00:00:00 的创建日期外,我得到了正确显示的所有字段。我不知道我做错了什么。感谢您的帮助。

编辑:我已经有一个名为“updated”的字段,它使用“Current_timestamp”。

4

5 回答 5

3

您可以在数据库中创建一个名为 created 类型的时间戳,并将默认值设置为 CURRENT_TIMESTAMP,而不是使用 php 设置时间。这将在没有 php 的情况下自动执行您需要的操作。这是代码:

    ALTER TABLE `users` ADD COLUMN `created` timestamp DEFAULT CURRENT_TIMESTAMP;
于 2012-09-21T12:17:48.390 回答
1

MySQL 有可能在创建记录时插入的字段上具有时间戳。

在您的 SQL 中,将其用于创建:

`Created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP

您不需要任何 PHP 代码来处理时间戳。

于 2012-09-21T12:18:09.530 回答
0

一个潜在的解决方法是,由于您知道 $created 的值,因此您实际上不需要转义它。因此,您的 $insert_sql 将是:

$insert_sql = sprintf("INSERT INTO users (first_name, last_name, username, password, email, created)"
. "VALUES('%s', '%s', '%s', '%s', '%s', '".$created."');",
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));

请注意,这仅适用于您绝对控制有关变量的所有内容时。

于 2012-09-21T15:11:36.720 回答
0

尝试 $created = date("mdy H:i:s", time());

于 2012-09-21T12:15:27.910 回答
0

您实际上可以在 MySQL 中添加当前时间,而无需重用 current_timestamp。试试这个作为你的插入查询;它不涉及任何数据库架构更改,它仍然应该为您提供正确的结果:

$query = "INSERT INTO users (first_name, last_name, username, password, email, created)"
. "VALUES('%s', '%s', '%s', '%s', '%s', now())"
于 2012-09-21T12:16:41.263 回答