【问题标题】:Display the date of creation of a row in mysql在mysql中显示行的创建日期
【发布时间】:2012-09-21 12:10:36
【问题描述】:

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

【问题讨论】:

  • 请停止使用古老的 mysql_* 函数编写新代码。它们不再维护,社区已经开始deprecation process。相反,您应该了解准备好的语句并使用PDOMySQLi。如果你想学习,here is a quite good PDO-related tutorial.
  • 好的,我会记住你的建议,只是我是php新手。
  • 学习 PDO 或 MySQLi 的所有更好理由 ;)

标签: php mysql


【解决方案1】:

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

    ALTER TABLE `users` ADD COLUMN `created` timestamp DEFAULT CURRENT_TIMESTAMP;

【讨论】:

    【解决方案2】:

    MySQL 可以在创建记录时插入的字段上设置时间戳。

    在你的 SQL 中把这个用于创建:

    `Created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
    

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

    【讨论】:

    • 我知道,但我已经有一个名为“更新”的字段以供将来更新。所以我这样做是为了保持最初的创作日期。并且 CURRENT_TIMESTAMP 只能使用一次。
    • 确实如此。当我需要用 PHP 更新时间戳时,我使用 date('Y-m-d H:i:s');
    • @peterburg 等一下; 'updated' 使用 current_timestamp 作为默认值?
    • 是的!这就是为什么我不能将 current_timestamp 与 created 一起使用。
    • 这可能是你应该添加到你的问题@peterburg,因为到目前为止一半的答案涉及改变你的桌子
    【解决方案3】:

    试试 $created = date("m-d-y H:i:s", time());

    【讨论】:

      【解决方案4】:

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

      $query = "INSERT INTO users (first_name, last_name, username, password, email, created)"
      . "VALUES('%s', '%s', '%s', '%s', '%s', now())"
      

      【讨论】:

        【解决方案5】:

        一个潜在的解决方法是,由于您知道 $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));
        

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

        【讨论】:

        • 我尝试过,但我仍然得到这些烦人的零。我真的不明白发生了什么。注意:“更新”字段的类型为“TIMESTAMP”,默认=“CURRENT_TIMESTAMP”,属性=“更新CURRENT_TIMESTAMP”;“创建”字段的类型=“日期时间”,默认=“无”且不为空。这令人沮丧!
        • 只是...作为检查,数据库表本身是否有零?比如,你可以通过 phpMyAdmin 或 mysql-workbench 访问它并检查,@peterburg?
        • 另外,是否使用 now() 代替 datetime 工作(我之前的回答)?
        • 是的; phpmyadmin 中有零。我也尝试了 now(),但它不起作用。我不知道这是否是我怀疑的 sprintf 表达式中的错误。
        • 人力资源部。我的意思是,尝试回显 $insert_sql。我刚刚验证了 now() 正确地插入了日期时间。你能在 mysql_query 之后运行echo mysql_errno($link) . ": " . mysql_error($link) . "\n"; 吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 2012-10-02
        • 2019-04-22
        • 2013-03-19
        • 1970-01-01
        相关资源
        最近更新 更多