如何从元文件中解析日期并将其存储到mySQL数据库中

时间:2015-08-28 10:23:11

标签: php mysql

我想用php解析一个元文件并将数据存储到我的数据库中。在这种情况下,我想找到以#开头的行,并将日期保存到mySQL数据库中:

18923081293801293.animal=cat
#Tue Jun 14 12:40:44 CEST 2015
18923081293801293.name=Fred
18923081293801293.age=24

到目前为止,这是我的代码。它正在解析animalnameage

                        $properties = array();

                        foreach ($linesArray AS $line) {
                            if (false !== ($pos = strpos($line, '='))) {
                                $prop=array();    
                                $prop[trim(substr($line, 0, $pos))] = trim(substr($line, $pos + 1));
                                $lineContArray = explode("=", $line);
                                $identArray = explode(".", $lineContArray[0]);

                                $ident = $identArray[0];
                                $type = $identArray[1];     

                                $value = $lineContArray[1];

                                $found = 0;
                                for ($i=0; $i<count($properties); $i++) {
                                    if ($properties[$i]['number'] == $ident) {
                                        $properties[$i][$type]= $value;
                                        $found=1;
                                        break;
                                    }
                                }
                                if ($found == 0) { 
                                    if (!empty($type)) { 
                                        $properties[] = array('number' => $ident, $type => $value); 
                                    } else { 
                                    $properties[] = array($ident => $value); } 
                                            }
                                    }
                                }


$sql = "INSERT INTO farm (animal,name,age) values(?,?,?) ";
$q = $pdo->prepare($sql);
foreach($properties as $row) {
   $q->execute(array($row['animal'], $row['name'], $row['age']));
}

但我不知道如何解析日期行并将其作为日期(列类型:datetime)存入我的数据库。

2 个答案:

答案 0 :(得分:1)

要从文件中获取日期,您需要在循环内的行的开头检查#

foreach ($linesArray AS $line) {
    // Check for # as first character (but only if there is a first character).
    if (strlen($line) && $line[0] == '#') {
        // Convert everything except the first character to a date.
        $date = strtotime(substr($line, 1));
        // Convert it back to a string in a format that MySQL likes.
        $strDate = date("y-m-d H:i:s", $date);
    }
    // Here the rest of your old continues.
    if (false !== ($pos = strpos($line, '='))) {
        ...

然后您可以像插入其他值一样将其插入数据库中。不确定这完全适合你的代码,因为我不了解所有这些,但它应该给你一个如何做到至少的提示。

答案 1 :(得分:1)

以下代码将行转换为日期,可以插入到DB。

if ($line[0] == '#')    //if line start with
{
$line = str_replace('#', '',$line); //remove # from line
$dates = new DateTime($line);       //convert line to date time
$reformdate = $dates -> format("Y-m-d H:i:s");   //format date to as required style
}

创建一个数据类型为&#34; datetime&#34;的列你可以插入如下例子。

INSERT INTO tablename (dateandtime) VALUES ('$reformdate');

在你的情况下,将$ reformdate添加到$ properties数组并将其添加到PDO中。