时间戳问题

时间:2010-07-16 00:10:54

标签: php mysql insert timestamp

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

我有一个创建主题脚本,然后我创建了一个主题,它在时间戳表(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

  

CREATE TABLE IF NOT NOT EXISTS forum_kommentareid int(11)NOT   NULL AUTO_INCREMENT,fk_forum_traad int(11)NOT NULL,
  brugernavn text NOT NULL,indhold mediumtext NOT NULL,dato   timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE   CURRENT_TIMESTAMP,godkendt varchar(4)NOT NULL DEFAULT'ja',

  PRIMARY KEY(id))ENGINE = MyISAM DEFAULT CHARSET = latin1   AUTO_INCREMENT = 4;

     

-

     

- tabellen forum_kommentare

的数据转储      
     

-

     

- tabellen forum_traad

的Struktur-dump      

CREATE TABLE IF NOT NOT EXISTS forum_traadid int(11)NOT NULL   AUTO_INCREMENT,overskrift文本NOT NULL,indhold mediumtext   NOT NULL,fk_forum_kategori int(11)NOT NULL,brugernavn文本   NOT NULL,dato时间戳NOT NULL DEFAULT CURRENT_TIMESTAMP ON   UPDATE CURRENT_TIMESTAMP,godkendt varchar(4)NOT NULL DEFAULT   'ja',PRIMARY KEY(id))ENGINE = MyISAM DEFAULT CHARSET = latin1   AUTO_INCREMENT = 3;

     

-    - tabellen forum_traad

的数据转储

希望有人可以帮助我:/

2 个答案:

答案 0 :(得分:0)

除了需要正确格式化的代码,以便人们可以阅读它,我强烈建议您使用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函数可以与像INTERVAL这样的DATETIME一起使用,这样你就可以做很多事情。

// 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,所以你可以查看该主题的反馈意见。

希望它有所帮助!

答案 1 :(得分:0)

更便宜,更开心的解决方案是......

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

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