【问题标题】:MySQL add timestamp when saving dataMySQL在保存数据时添加时间戳
【发布时间】:2013-12-28 06:25:50
【问题描述】:

我有这个 php 脚本每小时将数据保存到数据库中,我想知道如何在保存数据时添加时间戳。 (另外,我应该在 phpMyAdmin 中放置什么作为长度/值)我表中的列是:

数字、名称、类型、空值、默认值

1,时间戳,时间戳,否,CURRENT_TIMESTAMP

2,比特币,浮动,是,空

3,美元,浮动,是,NULL

我的脚本:

<?php
$json_url = "https://crypto-trade.com/api/1/ticker/dvc_btc";
$json_data = file_get_contents($json_url);
$json_feed = json_decode($json_data);
$DVCdata = $json_feed->data;
$DVCask = $DVCdata->min_ask;
$json_url1 = "https://api.bitcoinaverage.com/ticker/USD";
$json_data1 = file_get_contents($json_url1);
$json_feed1 = json_decode($json_data1);
$BTCask = $json_feed1->ask;
$DVC_USD = $BTCask * $DVCask;
$DVCround = round($DVC_USD, 8);
$connection = mysqli_connect("mysql.serversfree.com",user,pass,database); 

if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

mysqli_query($connection,"INSERT INTO database (Timestamp, BTC, USD)
VALUES (???, '$DVCask', '$DVCround')");

mysqli_close($connection);    
?>

【问题讨论】:

  • time() 是一个 PHP 函数

标签: php mysql database timestamp database-table


【解决方案1】:

由于您的列默认为 CURRENT_TIMESTAMP,只需完全取出该字段 - 它将获得默认值

mysqli_query($connection,"INSERT INTO database (BTC, USD) VALUES ('$DVCask', '$DVCround')");

请记住,如果它们是不同的机器并且时间不同步,那么它将是数据库上的时间而不是网络服务器上的时间。

【讨论】:

  • 另外,一定要设置列来更新记录更新的时间戳,否则它只会在记录被插入时设置。更多信息:dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
  • 我需要在 phpmyadmin 中输入长度/值还是留空?
  • 应该没问题 - 我不知道 phpadmin 但时间戳没有长度参数,并且在您的问题中它已经默认为 CURRENT_TIMESTAMP。
  • 我取出字段并打开脚本。有没有办法验证它是否成功?我打开桌子,什么都没有。它说:“MySQL 返回了一个空结果集(即零行)。(查询耗时 0.0002 秒)”
  • 如果数据库中没有行,INSERT 查询似乎没有运行 - 你是如何运行它的?
【解决方案2】:

现在试试()

mysqli_query($connection,"INSERT INTO database (Timestamp, BTC, USD)
VALUES (NOW(), '$DVCask', '$DVCround')");

该值将被格式化为:2013-10-12 11:18:02。根据您的字段类型,只会保存日期或日期和时间。只保存日期,字段类型应该是DATE,如果你也想保留小时,使用DATETIME

对于其他字段,因为它们似乎包含美元值,您可能想使用十进制字段来代替?请记住,在字段的长度属性中,您必须输入两个数字,第一个是总位数,第二个是逗号后的位数,例如 5,2

【讨论】:

  • 我应该在时间戳和其他列的长度/值中添加什么?感谢您的回答。
【解决方案3】:

将时间戳字段设置为 datetime NOT NULL DEFAULT NOW()。这将为您获取当前日期/时间。

更多详情:http://www.w3schools.com/sql/func_now.asp

如果你想使用 php 合成器,你可以定义一个变量 $timestamp = date('Y-m-d H:i:s'); 然后使用:

<?php
$json_url = "https://crypto-trade.com/api/1/ticker/dvc_btc";
$json_data = file_get_contents($json_url);
$json_feed = json_decode($json_data);
$DVCdata = $json_feed->data;
$DVCask = $DVCdata->min_ask;
$json_url1 = "https://api.bitcoinaverage.com/ticker/USD";
$json_data1 = file_get_contents($json_url1);
$json_feed1 = json_decode($json_data1);
$BTCask = $json_feed1->ask;
$DVC_USD = $BTCask * $DVCask;
$DVCround = round($DVC_USD, 8);
$timestamp = date('Y-m-d H:i:s');
$connection = mysqli_connect("mysql.serversfree.com",user,pass,database); 

if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

mysqli_query($connection,"INSERT INTO database (Timestamp, BTC, USD)
VALUES ('$timestamp', '$DVCask', '$DVCround')");

mysqli_close($connection);    
?>

干杯

【讨论】:

  • 我应该在哪里设置它?在 phpmyadmin 中还是在脚本本身中?
  • @Smeagol 我为你更新了整个脚本。复制并粘贴它,它应该可以工作。我添加了一个带有 php 值的 $timestamp 变量: date('Ymd H:i:s'); 这将起作用,并为您设置当前日期/时间并将其存储在数据库中。您只需将phpmyadmin中的“时间戳”字段更改为日期时间
  • 它给了我一个无效的默认值错误(#1067)我该怎么办?
  • @Smeagol 是什么给了你错误?复制/粘贴脚本?您是否更改了数据库中的字段类型?
  • 我在 phpmyadmin 中将时间戳字段更改为 datetime
【解决方案4】:

如果您将列数据类型定义为CURRENT_TIMESTAMP,则无需在查询中添加值。

如果你没用过的话,

$timestamp = date('Y-m-d H:i:s');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多