我有一个主要的问题,试图破坏日期数组,然后将它们插入数据库,而不像文本和整数或双打,这似乎很容易...我该怎么做呢?日期格式为" Y / m / d"。
我冒了各种数组,然后将它们插入到数据库中,然后检索它们并将它们分解成原始数组。我想用一组日期来做这个,但我需要在插入之前格式化它们。
如何格式化数组中的日期,然后将其传递给implode()函数以将其插入MySL数据库?
数组的结构如下:
$array = (
[0] => 2012/09/13
[1] => 2008/03/20
[2] => 2006/12/21
)
I have tried inserting arrays after imploding the date variable but to no avail. It just prints "Array" in my mysql database - i am using PHPmyadmin - please help me figure out whats going down! thanks!
更新:这是我正在使用的代码:
$arrlength = count($day);
$arrlength1 = count($month);
$arrlength2 = count($year);
$t = 0;
$line = Array();
for($x=0; $x<$arrlength; $x++){
for($y=0; $y<$arrlength1; $y++){
for($z=0; $z<$arrlength2; $z++){
$line = $day[$x]." ".$month[$z]." ".$year[$y];
}
}
//$line = $day[$x]." 2";
//$x++;
}
$line = implode(",",$line);
echo $line;
答案 0 :(得分:0)
您是否尝试将多个日期插入单行的单个数据库字段中?
我建议创建一个额外的表,并在数组中的每个日期插入一行。那将是最好的解决方案和最佳实践。
但是如果你想继续在单个字段/行中保存它们,请使用implode()/ explode()或serialize()/ unserialize()。
好的,我们在你的表中有一个名为dates
的字段,它的类型为varchar或文本,其长度足够。
<?php
$dates=array('2012/09/13','2008/03/20','2006/12/21');
// save them
$sql="INSERT INTO event(title, dates) VALUES ('dummy title', '".implode(",",$dates)."')";
$conn->query($sql);
// recover them
$sql="SELECT * FROM event";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
// split them again into array
$dates=explode(",",$row["dates"]);
}
?>
但正如我第一次说的那样,理想情况下从数据库的角度来看创建一个辅助表是更正确的。
CREATE TABLE IF NOT EXISTS `event` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `event_date` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`event_id` int(11) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id`),
KEY `event_id` (`event_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ALTER TABLE `event_date`
ADD CONSTRAINT `event_date_ibfk_1` FOREIGN KEY (`event_id`) REFERENCES `event` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION;
在这种情况下,在将日期保存到event_date
之前,您首先必须转换其格式,例如:
<?php
$original_date='2006/12/21';
$date_object=DateTime::createFromFormat('Y/m/d', $original_date);
if ($date_object) {
$date_for_mysql=$date_object->format('Y-m-d');
}
?>