首页 > 解决方案 > 如何在 Joomla 模型中执行 LOAD DATA LOCAL INFILE

问题描述

我想在 joomla 模型中将最多 10.000 条记录导入数据库(mysql)。在控制器文件中,我由用户从上传的数据文件创建一个 CSV 文件,然后将文件传递给模型。

我已经在 MySQL comand promt 中测试了查询,它工作正常。由 Conroller 文件创建的 CSV 中的所有记录均已导入。但是我在 joomla 上执行查询时出错,没有定义错误。Joomla 在本地主机上运行,​​ubuntu 18.04 桌面。

这是我的控制器文件:

//writing csv file
        $csv_file = $path."csv_file_ok_". round(microtime(true)) .".csv";
        $create_csv = fopen($csv_file,"w");
        $b= 0;
        foreach($key_index as $lines)
        {
            if($b == 0)
            {
                fputcsv($create_csv, array_keys($lines));
            }
            else
            {
                fputcsv($create_csv, $lines);
            }
            $b++;

        }

        fclose($create_csv);
        chmod($csv_file, 0755);
        //chown($csv_file, mysql:mysql);
        $model = $this->getModel();
        $model->saveReservation($csv_file);

这是我的模型:

public function saveReservation($file)
    {
        $db = JFactory::getDbo();
        $query = $db->getQuery(true);
        $sql = "TRUNCATE TABLE ". $db->quoteName('#__service_reservation');
        $db->setQuery($sql);

        $del = $db->execute();

        if($del)
        {   
            $query = $db->getQuery(true);
            $sql = 'LOAD DATA LOCAL INFILE ' . $db->quote($file) .
                   ' INTO TABLE ' . $db->quoteName('#__service_reservation') .
                   ' FIELDS TERMINATED BY '. $db->quote(',') . ' ENCLOSED BY '. $db->quote(' ').
                   ' LINES TERMINATED BY \'\n\' '.
                   ' IGNORE 1 ROWS ' .
                   ' (plnt,reserv_no,item,material_no,reqmt_qty,bun,withdrwl_q,balance_qt,mvt,sloc,rcvsloc,reqmt_date,base_date,recipient,text)';

            //echo $sql;

            $db->setQuery($sql);
            echo($query->__toString());
            $res = $db->execute();
            //return $res;
        }

这是我的 csv 文件的一部分:

plnt,reserv_no,item,material_no,reqmt_qty,bun,withdrwl_q,balance_qt,mvt,sloc,rcvsloc,reqmt_date,base_date,recipient,text
3DP0,0011988450,5,EM120WH-35,1,PC,0,-1,9X3,8101,1090,2018-07-13,2018-07-13,9Y4,"IBU RINI -PONDOK PINANG"
3DP0,0012267262,3,9LCEJC20YRD19,1,PC,0,-1,9X3,8101,1090,2018-08-27,2018-08-27,9Y4,"100481683 FELICIA GRACE-IBU -SDSS SERPONG"
3DP0,0012361530,16,DSGY-G525JBKZ,1,PC,0,-1,9X3,8101,3190,2018-12-10,2018-09-10,601,"HEIN SASS"
3DP0,0012381155,10,1627A47205-MD,1,PC,0,-1,9X3,8101,1091,2018-09-13,2018-09-13,REFURBISH,

在 Mysql 提示上运行:

mysql> LOAD DATA LOCAL INFILE '/var/www/html/cs/tmp/csv_file_ok_1557531392.csv' INTO TABLE `q26f3_service_reservation` FIELDS TERMINATED BY ',' ENCLOSED BY '' LINES TERMINATED BY '\n' IGNORE 1 ROWS (plnt,reserv_no,item,material_no,reqmt_qty,bun,withdrwl_q,balance_qt,mvt,sloc,rcvsloc,reqmt_date,base_date,recipient,text);
Query OK, 2944 rows affected (1.45 sec)
Records: 2944  Deleted: 0  Skipped: 0  Warnings: 0

但是joomla给我错误:


If difficulties persist, please contact the System Administrator of this site and report the error below.

    0
    /var/www/html/cs/libraries/joomla/database/driver/mysqli.php:665 

标签: phpdatabasejoomla3.0

解决方案


推荐阅读