2012-07-13 83 views
1

我想插入一行到数据库。所有参赛作品中插入正确,但日期被插入为:日期不插入mysql_query插入

0000-00-00 

我试图格式化手动日期:

 $updated = $a["updated"][0]; 

     $updated = explode(" ", $updated); 
     $updated[1] = explode("/", $updated[1]); 

     $y = date('Y'); 
     $m = $updated[1][1]; 
     $d = $updated[1][0]; 

     $updated = $y . '-' . $m . '-' . $d; 

     $updated = strtotime($updated); 
     echo '<pre>'. $updated .'</pre>'; 
     $upd = date('Y-m-d', $updated); 

     $a["updated"][0] = $updated;    
     echo '<pre>'. $upd .'</pre>'; 

这是后续代码var_dump($ A)的输出:

1342134000 

2012-07-13 

array(3) { 
    ["metal"]=> 
    string(6) "Silver" 
    ["am"]=> 
    array(3) { 
    [0]=> 
    string(7) "2748.00" 
    [1]=> 
    string(8) "1779.220" 
    [2]=> 
    string(8) "2253.200" 
    } 
    ["updated"]=> 
    array(1) { 
    [0]=> 
    int(1342134000) 
    } 
} 

我也尝试过使用mysql_date_format,但行根本没有插入:

$updated = mysql_date_format($updated); 

这是我的插入查询

mysql_query("INSERT INTO LondonFixes VALUES(null,'" . $a["metal"] . "','AM'," . $a["am"][1] . "," . $a["am"][0] . "," . $a["am"][2] . "," . $a["updated"][0] . ", null)"); 

这是我的表结构

CREATE TABLE IF NOT EXISTS `LondonFixes` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `Metal` varchar(10) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    `AmPm` varchar(2) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL, 
    `GBP` decimal(10,5) NOT NULL, 
    `USD` decimal(10,5) NOT NULL, 
    `EUR` decimal(10,5) NOT NULL, 
    `Updated` date NOT NULL, 
    `TimeStamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `Entry` (`Metal`,`AmPm`,`Updated`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=229 ; 

有可能是一个非常简单的解决方案,这一点,但宽容我请!

+0

您是否尝试过硬连接您的语句的日期,以确保您的查询使用的格式与数据库所期望的格式相同? – andrewsi 2012-07-13 15:31:19

+0

'$ a [“updated] [0]'的值显示为整数unix时间戳值,而不是格式化的日期字符串。要传入整数值,请将其包装在SQL语句中的'FROM_UNIXTIME'中, - 或者通过格式化的日期字符串(看我的回答) – spencer7593 2012-07-13 16:21:19

回答

2

月和日需要前导零。

用途:

$upd = date('Y-m-d', $updated); 

另外要确保你的日期是由像串报价封闭。

,'" . $a["updated"][0] . "' 

在您的代码中,您没有日期报价。

+0

'n'标记是月份*没有*前导零 - 你的意思是'Ymd'? – 2012-07-13 15:32:27

+1

我不是已经这样做了吗?'$ upd = date('Ym-d',$ updated);'。 – Gravy 2012-07-13 15:35:00

+1

,'“。 $ a [“updated”] [0]。 “' – 2012-07-13 15:37:59