将大型CSV解析为mysql db

时间:2014-12-23 15:33:06

标签: php csv kohana

我想用php解析非常大的csv到mysql。我的想法是执行4-5次请求,将数据粘贴到mysql中,之后每个迭代请求应该从尚未粘贴的行开始(一个请求迭代脚本可以覆盖400行)。但是我不知道要跳过已经粘贴到数据库中的csv中的行。也许我应该检查表中的行数,然后用这个数字定义一些变量并根据它进行迭代。但我不知道如何使用foreach操作csv,我只有代码中带有“while”的代码。 这是我目前的代码:

public function action_index(){

    if(($handle = fopen('data_wpic.csv', 'r')) !== false)
    {
        $header = fgetcsv($handle);

        while(($data = fgetcsv($handle)) !== false)
        {


            $model = ORM::factory('Drug');

            $image_path = $data[18];
            if(strlen($image_path) > 5) {
                $path= 'drug_images/' . $image_path;

                $image = ORM::factory('Image')->remote($path);
                if ($image) {
                    $model->image_id = $image;
                    unlink($path);
                }
            }

            $model->drugGenericName = $data[17];
            $model->drugForm = $data[4];
            $model->drugProperties = $data[7];
            $model->drugIndication = $data[2];
            $model->drugDosage = $data[13];
            $model->drugSide = $data[11];
            $model->drugContrIndication = $data[12];
            $model->drugInteractions = $data[15];
            $model->drugSpecial = $data[0];
            $model->drugExpiry = $data[3];
            $model->drugRealCondition = $data[8];
            $model->tradeName = $data[16];

            $model->save();

            unset($data);

        }
        fclose($handle);
    }

}

我的网页托管有限,这就是我尝试解决此例程的原因 如果有人知道更好的方法 - 我会很高兴听到他

0 个答案:

没有答案