php - 将大型 CSV 导入 mysql 数据库

标签 php mysql csv

我在尝试将大型 CSV 文件导入本地主机上的 mysql 时遇到了很多麻烦。

CSV 大约有 55 MB,包含大约 750,000 行。

我重写了脚本,以便它解析 CSV 并逐行转储。

代码如下:

$row = 1;
if (($handle = fopen("postal_codes.csv", "r")) !== FALSE) 
{
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) 
    {
        $num = count($data);
        $row++;
        for ($c=0; $c < $num; $c++) 
        {
            $arr = explode('|', $data[$c]);

            $postcode = mysql_real_escape_string($arr[1]);
            $city_name = mysql_real_escape_string($arr[2]);
            $city_slug = mysql_real_escape_string(toAscii($city_name));
            $prov_name = mysql_real_escape_string($arr[3]);
            $prov_slug = mysql_real_escape_string(toAscii($prov_name));
            $prov_abbr = mysql_real_escape_string($arr[4]);
            $lat = mysql_real_escape_string($arr[6]);
            $lng = mysql_real_escape_string($arr[7]);

            mysql_query("insert into cities (`postcode`, `city_name`, `city_slug`, `prov_name`, `prov_slug`, `prov_abbr`, `lat`, `lng`) 
                         values ('$postcode', '$city_name', '$city_slug', '$prov_name', '$prov_slug', '$prov_abbr', '$lat', '$lng')") or die(mysql_error());
        }
    }
    fclose($handle);
}

问题是它需要很长时间才能执行。任何建议的解决方案将不胜感激。

最佳答案

您正在重新发明轮子。查看mysqlimport MySQL 自带的工具。是导入CSV数据文件的高效工具。

mysqlimport 是 LOAD DATA LOCAL INFILE SQL 语句的命令行界面。

两者都应该比逐行执行 INSERT 快 10-20 倍。

关于php - 将大型 CSV 导入 mysql 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6932729/

相关文章:

php - 如何遍历Drupal的看门狗表?

mysql - Codeigniter 迁移 + 多个表 + 每个表一个迁移文件

mysql - LOAD DATA LOCAL INFILE 命令不导入任何数据

python - 如何动态更新 Django 中的模型?

ruby - 来自 CSV 文件的字符串开头的神秘前导 "empty"字符

php - HTML/PHP 联系表单 PHP 错误

javascript - 具有可变形式位置的 Ajax URL

PHP Mysql 查询以 HTML 形式输出列表

javascript - 为什么我的代码显示错误的图像?

c - 解析已解析的字符串