php - 如何在 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
解决方案
推荐阅读
- r - 如何将数据框 A 中的每一列重复地除以数据框 B 中同一列的中位数?
- algorithm - 基于好恶匹配人的算法
- django - 如何使导入导出保存 JSONField 不作为字符串
- pandas - 按 ID 和日期合并行 - Pandas
- odoo - 对具有相同产品的数量行进行分组和求和
- ios - 我可以在没有通知权限的情况下使用 FCM 接收消息吗?
- next.js - 使用 Next.js 进行砌体布局
- javascript - 如何将文档的最大高度限制为 100% 并用剩余高度填充最后一个孩子?
- r - TaskscheduleR 作业返回 fetch.write_memory 错误,但在虚拟机上的 RStudio 中作为本地作业工作
- bash - 在 shell 脚本中将 ftp 更改为 sftp