8

我有下表,属性如下

CREATE TABLE `test` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `active` varchar(4) CHARACTER SET latin1 DEFAULT NULL,
  `von` date DEFAULT NULL,
  `bis` date DEFAULT NULL,
  `rabatt` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `code` varchar(64) CHARACTER SET latin1 DEFAULT NULL,
  `text_kurz` text CHARACTER SET latin1,
  `linkname` varchar(1024) CHARACTER SET latin1 DEFAULT NULL,
  `link` varchar(2048) CHARACTER SET latin1 DEFAULT NULL,
  `special` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `type` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  `hersteller` varchar(128) CHARACTER SET latin1 DEFAULT NULL,
  `smb` smallint(1) DEFAULT NULL,
  `dhs` smallint(1) DEFAULT NULL,
  `sidebar` varchar(4) CHARACTER SET latin1 DEFAULT 'ja',
  `img_tag` text CHARACTER SET latin1,
  `dm_bild` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `von` (`von`),
  KEY `bis` (`bis`),
  KEY `type` (`type`),
  KEY `active` (`active`),
  KEY `code` (`code`),
  FULLTEXT KEY `Volltext` (`text_kurz`)
) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8

我想用php插入德语格式的unix时间戳我一直在尝试以下

 $time = "1057941242";
    $qry = 'INSERT INTO test (active, von, bis, rabatt, code, text_kurz)
                        VALUES("ja",FROM_UNIXTIME('.$gutschein->startDate.'),
                                    FROM_UNIXTIME('.$gutschein->endDate.'),
                                    "'.$gutschein->title.'",
                                    "'.$gutschein->code.'",
                                    "'.$gutschein->shortDescription.'")'
4

2 回答 2

17

您的时间戳(例如 1346882400000)似乎是自 UNIX 纪元以来的毫秒数,而自 UNIX 纪元以来需要一个以FROM_UNIXTIME()为单位的参数。因此,您应该将参数除以 1000:

$qry = 'INSERT INTO test (active, von, bis, rabatt, code, text_kurz)
                    VALUES("ja",FROM_UNIXTIME('.$gutschein->startDate/1000.'),
                                FROM_UNIXTIME('.$gutschein->endDate/1000.'),
                                "'.$gutschein->title.'",
                                "'.$gutschein->code.'",
                                "'.$gutschein->shortDescription.'")'

您还应该考虑使用准备好的语句,将变量作为参数传递给其中,这些参数不会被 SQL 评估。

于 2012-09-08T18:57:37.290 回答
0

我建议你稍微改变一下你的方法。

您可以将它们以特定格式存储并从那里“翻译”它,而不是将本地化数据存储在数据库中。例如,您将日期存储在 von 和 bis DATE 字段中。相反,您可以将这些字段转换为 INT 并存储 unix 时间戳。

这种方法将使您受益于将日期转换为您需要的任何语言环境/格式 - 在您的情况下是德语。

但是,如果您只是希望上述工作,那么您将需要更改您的 INSERT 语句如下(我假设 $gutschein->startDate 是一个数字,即 unix 时间戳

$time = "1057941242";
$qry = 'INSERT INTO test (active, von, bis, rabatt, code, text_kurz) '
     . 'VALUES('
     . '"ja", '
     . 'FROM_UNIXTIME(' . $gutschein->startDate . ', "%Y-%m-%d %H:%i:%s"), '
     . 'FROM_UNIXTIME(' . $gutschein->endDate . ', "%Y-%m-%d %H:%i:%s"), '
     . '"' . $gutschein->title . '", '
     . '"'.$gutschein->code.'", '
     . '"'.$gutschein->shortDescription.'")'

如果日期格式不适用于德国,请参考下面的链接以获取最适合您的格式

FROM_UNIXTIME 参考

于 2012-09-08T18:55:21.540 回答