【问题标题】:timestamp issue时间戳问题
【发布时间】:2011-03-16 17:13:40
【问题描述】:

我有一些脚本,在数据库表中我将 dato 设置为 int(25) 和时间戳

我有一个创建主题脚本,然后我创建了一个主题,它将日期和时间插入时间戳表 (dato)。

但不知何故,我的评论脚本不会插入时间 :S 和我使用的相同的东西 :S。

这是我的脚本

    if(isset($_POST['opret_kommentar']))
{
 $indhold = $_POST['indhold'];
 $godkendt = "ja";

 $mysql = connect();
 $stmt = $mysql->prepare("INSERT INTO forum_kommentare (fk_forum_traad, brugernavn, indhold, dato, godkendt) VALUES (?,?,?,?,?)") or die($mysql->error);
 $stmt->bind_param('issis', $traadID, $_SESSION['username'], $indhold, $dato, $godkendt) or die($mysql->error);
 $stmt->execute();
 $stmt->close();

 $svar = mysqli_insert_id($mysql); 

 header("location: forum.traad.php?traadID=$traadID&kategoriID=$kategoriID&#$svar");

}

这是我的创建主题脚本,因此您可以看到它与我使用的内容相同:S

    if(isset($_POST['send'])) {

 $kategoriID = $_GET['kategoriID'];
    $overskrift = $_POST['overskrift'];
    $indhold    = $_POST['indhold'];
 $godkendt   = "ja";

    $mysql = connect();
    $stmt = $mysql->prepare("INSERT INTO forum_traad (overskrift, indhold, fk_forum_kategori, brugernavn, dato, godkendt) VALUES (?,?,?,?,?,?)") or die($mysql->error);
 $stmt->bind_param('ssisis', $overskrift, $indhold, $kategoriID, $_SESSION['username'], $dato, $godkendt) or die($mysql->error);
 $stmt->execute();
 $stmt->close();

 $traadID = mysqli_insert_id($mysql);

  header("location: forum.traad.php?traadID=$traadID&kategoriID=$kategoriID");

}#Lukker isset send

这是我的 SQL

如果不存在则创建表 forum_kommentare (id int(11) NOT NULL AUTO_INCREMENT, fk_forum_traad int(11) NOT NULL,
brugernavn text NOT NULL, indhold mediumtext NOT NULL, dato 时间戳 NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, godkendt varchar(4) NOT NULL DEFAULT 'ja',
主键 (id) 引擎=MyISAM 默认字符集=latin1 AUTO_INCREMENT=4 ;

--

-- tabellen forum_kommentare 的数据转储


--

-- 用于 tabellen 的 Struktur 转储 forum_traad

如果不存在则创建表 forum_traad (id int(11) NOT NULL AUTO_INCREMENT, overskrift text NOT NULL, indhold mediumtext 非空,fk_forum_kategori int(11) 非空,brugernavn 文本 非空,dato 时间戳非空 DEFAULT CURRENT_TIMESTAMP ON 更新 CURRENT_TIMESTAMP,godkendt varchar(4) NOT NULL DEFAULT 'ja', 主键 (id) 引擎=MyISAM 默认字符集=latin1 AUTO_INCREMENT=3 ;

-- -- tabellen的数据转储forum_traad

希望有人可以帮助我:/

【问题讨论】:

    标签: php mysql insert timestamp


    【解决方案1】:

    一个更便宜和更愉快的解决方案是......

    $stmt = $mysql->prepare("INSERT INTO forum_traad (overskrift, indhold, fk_forum_kategori, brugernavn, godkendt) VALUES (?,?,?,?,?)") or die($mysql->error);
    

    只是不要设置 dato 列。当插入或更新行时,任何表的第一(最左侧)TIMESTAMP 列将自动设置为当前日期时间。

    【讨论】:

      【解决方案2】:

      除了您的代码需要正确格式化以便人们可以阅读之外,我强烈建议您使用 MySQL 日期字段而不是时间戳。

      所以把这个查询改成这样:

      // notice that the date is inserted by MySQL with the NOW() operator
      $stmt = $mysql->prepare("INSERT INTO forum_traad (overskrift, indhold, fk_forum_kategori, brugernavn, dato, godkendt) VALUES (?,?,?,?,NOW(),?)") or die($mysql->error);
      

      为什么要使用 MySQL 日期字段而不是时间戳?

      DATETIME 的范围... '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'。

      TIMESTAMP 的范围... '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07'

      不仅如此,您还有很多内置的 MYSQL 函数可以与 DATETIME 一起使用,例如 INTERVAL,这将使您能够做出伟大的事情。

      // easy pull all comments values from within a range
      SELECT * FROM your_table
      WHERE your_date_field = DATE_SUB('2001-01-01 12:12:12' + INTERVAL 15 DAYS;
      

      如果您确实需要在 PHP 上使用时间戳,您可以像这样在 SQL 上实时提取它们:

      // converts a DATETIME field real time to timestamps
      SELECT UNIX_TIMESTAMP(your_date_field)
      FROM your_table (...)
      And when you pull them out just format them anyway you like using strftime. Example bellow.
      
      // pull a date from MySQL and format them to a custom format
      // %A -> full weekday | %B -> full month name | %d -> month day | %Y - year 1999
      $sql = "SELECT title, name, UNIX_TIMESTAMP(date) as timestamp
              FROM your_table
              WHERE your_limits";
      $result = mysql_fetch_assoc(mysql_query($sql));
      echo strftime("%A, %B %d, %Y", $result['timestamp']);
      

      我已经covered a question in the same topic,因此您可以查看该线程以获取其他回复。

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-02
        • 2010-11-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多