【问题标题】:Retrieving timestamp from mysql row upon creation of new row entry在创建新行条目时从 mysql 行中检索时间戳
【发布时间】:2012-01-27 06:35:35
【问题描述】:

这有效吗?

    <?php
        $timestamp = mysql_query("INSERT INTO column1 (entry1, entry2) 
                                  VALUES ('$entry1', '$entry2') 
                                  AND SELECT timestamp");
    ?>

timestamp 是一个 mysql 列,它在创建行时生成时间戳。

例如 - 我需要指定“时间戳”行的创建吗? (我觉得还可以,配置自己做) - 这两个动作可以在同一个查询中执行吗?如果没有,我该怎么做?我想确保我得到时间戳,因为我稍后在代码中使用它作为这个条目的唯一标识符。否则我怎么能得到它? (假设在许多其他行条目中可能存在多个且相似的条目)。

谢谢!

【问题讨论】:

    标签: php mysql database timestamp


    【解决方案1】:

    我取决于您需要这些信息的目的。如果您需要将其存储在其他行/实体中并且希望它保持一致,那么我会将日期存储在 PHP 中(可能在 Web 应用程序中的每个请求一次),然后在整个过程中使用它,例如

    $currentTimestamp = time();
    $timestamp = mysql_query("INSERT INTO column1 (entry1, entry2, timestamp_col) 
                                  VALUES ('$entry1', '$entry2', $currentTimestamp);
    

    这样,无论您在哪里使用时间戳,它都会保持一致。您的请求不必花费几秒钟的时间来改变时间戳。

    即使您没有将其存储在其他任何东西上,如果您需要检索该信息,您仍然可能希望使用此方法,因为唯一的其他方法是两个查询,这很可能会更有效。

    这并不意味着自动填充 MySQL 日期字段永远不会有意义,因为您只是记录该信息以便稍后检索,那么在 MySQL 中执行它当然是有意义的。

    【讨论】:

    • 好的,非常感谢,我应该为这个专栏使用什么数据类型?我以前尝试过这种方式,但结果都是零……一定是使用了错误的数据类型,所以我想改变它,但我同意——你说得对,这可能是最好的方法。
    • 查看有关日期格式的其他问题!我个人会使用 MySQL 的 DATETIME 格式(并确保在上面的示例中正确格式化 unix 时间戳)。
    【解决方案2】:

    这不是一个有效的 mysql 语句。作为一个选项,您可以改用 PHP 函数。

    $sql = "INSERT INTO column1 (entry1, entry2) VALUES ('$entry1', '$entry2')";
    $timestamp = mysql_query($sql) ? time() : null;
    

    【讨论】:

    • 好的,我知道了,我会用手柄,好电话。谢谢.. 但是在 php 和生成它们的 mysql 之间是否存在时间戳可能会偏离一毫秒的风险?
    • 是的,我认为这是可能的。如果毫秒对您很重要,您可以使用 TIMESTAMP 数据类型和 DEFAULT CURRENT_TIMESTAMP 选项向表中添加另一个字段。但在这种情况下,您需要使用另一个查询从您插入的行中检索该时间。
    • 是的,但我怎样才能找回那个时间?这正是我的问题.. 我怎么知道我正在检索正确的条目? :(
    【解决方案3】:

    不,这不是有效的语法。

    另一种方法是将 now() 分配给变量并在时间戳列中使用该变量,而不是自动生成的值。

    set @now = now();
    insert into your_table (timestamp_column) values (@now);
    select @now();
    

    【讨论】:

    • 这就是我正在考虑做的事情。但我在想time();nowtime 有什么区别? (我尝试了时间,但它给了我全零。在这种情况下我应该如何定义列?int?varchar?有多少空间?)谢谢!
    • 时间戳没问题。您可以为时间戳列分配任何有效的日期值(1970-2034 或类似的日期)
    【解决方案4】:

    如果您想准确地获取时间戳单元格中的时间戳值,则必须获取插入 id,然后使用最后一个插入 id 来获取该 id 的时间戳。 可以说,

    $query = mysql_query('INSERT INTO my_table("username","password") VALUES("falcon","test") ');
    $last_id = mysql_insert_id($query);  // This gets your id of the row inserted by $query
    $timstamp = mysql_query('SELECT timestamp FROM my_table where id = "'.$last_id.'"')
    

    【讨论】:

      猜你喜欢
      • 2013-05-27
      • 2015-07-27
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      相关资源
      最近更新 更多