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 に答える