将文本文件导入数据库

时间:2016-02-12 22:15:53

标签: php mysql file import phpmyadmin

是否可以使用phpmyadmin导入文本文件?

在文件中是这样的:

country - county / city
USA - Florida / Orlando
USA - Florida / Miami
USA - Washington / Washington DC
Switzerland - Solothurn / Grenchen

该文件有超过3000行

现在我想导入我的catergory表 表格是这样的:

id | parent_id | name

国家和县多次在档案中。在我的数据库中,我只需要它一次。 City在文件中是唯一的

我可以用phpmyadmin制作这个,还是只能用php? 任何人都可以告诉我如何做到这一点。 感谢

2 个答案:

答案 0 :(得分:1)

phpMyAdmin可以为此提供帮助,但您必须使用其他程序按摩数据,以便使用相同的分隔符(-/应该没问题)。您可以通过“搜索和替换”在任何文本编辑器(或您最喜欢的命令行工具; sed,awk,perl等)中执行此操作。只需确保您的数据不包含您​​要替换的字符(例如,在“Saxony-Anhalt”中)。

然后,您可以从phpMyAdmin“导入”选项卡执行标准导入。您似乎想要使用以下参数:

  • /-分隔的列(基于您在上面选择的内容)
  • 附带的栏目:(空白)
  • 列转义为:(空白)
  • auto
  • 结尾的行

答案 1 :(得分:0)

这是我自己的解决方案

<?php
require 'funcs/connect.php';

$file = 'cities.txt';

$file_handle = fopen($file, 'r');

while (!feof($file_handle)) {

$line = fgets($file_handle);

$text_line = explode("-",$line);

echo $text_line[0];  
echo $text_line[1];
echo $text_line[2];


if ($text_line[1] != "")
        {
            $name = $text_line[1];
            $stmt = $handler->prepare("SELECT name FROM news_cat WHERE name = '$name'");
                $stmt->execute();
                $count = $stmt->rowCount(); 
                if ($count >= 1)
                {
                    echo"Kanton schon vorhanden";
                }
                else
                {
                $stmt = $handler->prepare("INSERT INTO news_cat(name,parent_id)VALUES('$name','0')");
                $stmt->execute();   
                }
        }

if ($text_line[2] != "")
        {
            $name = $text_line[2];
            $canton = $text_line[1];
            $stmt = $handler->prepare("SELECT name FROM news_cat WHERE name = '$name'");
                $stmt->execute();
                $count = $stmt->rowCount(); 
                if ($count >= 1)
                {
                    echo"Bezirk schon vorhanden";
                }
                else
                {
                $stmt = $handler->prepare("SELECT id FROM news_cat WHERE name = '$canton'");
                $stmt->execute();
                while($row = $stmt->fetch(PDO::FETCH_OBJ)){
                $parent_id = $row->id;  
                }


                $stmt = $handler->prepare("INSERT INTO news_cat(name,parent_id)VALUES('$name','$parent_id')");
                $stmt->execute();   
                }
        }

if ($text_line[0] != "")
        {
            $name = $text_line[0];
            $bezirk = $text_line[2];

                $stmt = $handler->prepare("SELECT id FROM news_cat WHERE name = '$bezirk'");
                $stmt->execute();
                while($row = $stmt->fetch(PDO::FETCH_OBJ)){
                $parent_id = $row->id;  
                }


                $stmt = $handler->prepare("INSERT INTO news_cat(name,parent_id)VALUES('$name','$parent_id')");
                $stmt->execute();   

        }

echo "<br>";
}

fclose($file_handle);


?>