php - Laravel maatwebsite excel包导入2000+行导致1390代码错误

标签 php mysql excel laravel csv

我有 4 个 Excel 文件,每个文件包含 1000 行。我将其合并并使其为 4000,这样我可以节省一些时间。但是,如果我导入合并的文件,它会返回错误一般错误:1390 准备好的语句包含太多占位符。但是当我只将它们插入一个时,它就起作用了。我不知道为什么它返回这样的错误,它们甚至在每一列中都有相同的值。有人可以告诉我如何处理这个错误吗?我们将提供帮助。非常感谢

我正在使用 laravel maatwebsite excel 包。

我的导入代码

public function import(Request $request)
    {
        if($request->hasFile('template')){
            $path = $request->file('template')->getRealPath();
            $data = \Excel::load($path)->get();

            if($data->count() > 0){
                $rows = $data->toArray();

                foreach ($rows as $row) {

                    $level = '';
                    $stack = '';
                    $unit = '';
                    $gunit = '';


                    $street = '';
                    $block_unit = '';

                   //DONT MIND THIS FUNCTION HERE
                    if (strpos($row['address'], '#') !== false) {
                        $unit = explode("#",$row['address']);
                        $gunit = $unit[1];
                        $block = explode(" ",$unit[0],2);
                        if(isset($unit[1])) {
                            $x = explode("-",$unit[1]);
                            $level = $x[0];
                            $stack = $x[1];    
                            $street = $block[1];
                            $block_unit= $block[0];                     
                        }
                    }
                    elseif(strpos($row['address'], ' ') !== false){
                        $unit = explode(" ",$row['address']);
                        $block = explode(" ",$unit[0],2);
                        if(isset($unit[1])) {
                            $x = explode("-",$unit[1]);
                            $level = '';
                            $stack = '';
                            $x = preg_replace('/[0-9]+/', '', $row['address']);
                            $street = $x.substr($street,1);
                            $block_unit= $block[0];      
                        }
                    }
                    else{
                        $level = '';
                        $stack = '';
                        $unit = '';
                        $gunit = '';
                        $block_unit = '';
                        $street = '';
                    }
                    //END

                    $inserts[]=[
                        'transtype' => 'RESI',
                        'project_name' => $row['project_name'],
                        'unitname' => $gunit,
                        'block' => $block_unit,
                        'street' => $street,
                        'level' => $level,
                        'stack' => $stack,
                        'no_of_units' => $row['no._of_units'],
                        'area' => $row['area_sqm'],
                        'type_of_area' => $row['type_of_area'],
                        'transacted_price' => $row['transacted_price'],
                        'nettprice' => $row['nett_price'],
                        'unitprice_psm' => $row['unit_price_psm'],
                        'unitprice_psf' => $row['unit_price_psf'],
                        'sale_date' => $row['sale_date'],
                        'contract_date' => $row['sale_date'],
                        'property_type' => $row['property_type'],
                        'tenure' => $row['tenure'],
                        'completion_date' => $row['completion_date'],
                        'type_of_sale' => $row['type_of_sale'],
                        'purchaser_address_indicator' => $row['purchaser_address_indicator'],
                        'postal_district' => $row['postal_district'],
                        'postal_sector' => $row['postal_sector'],
                        'postal_code' => $row['postal_code'],
                        'planning_region' => $row['planning_region'],
                        'planning_area' => $row['planning_area'],
                    ];
                }


            }

            if(empty($inserts)){
                dd('Request data does not have any files to import.');  
            }
            else {
                \DB::table('xp_pn_ura_transactions')->insert($inserts);
                dd('record inserted');  
            }

        }
    }

最佳答案

使用 laravel insert() 方法插入的记录数不能超过 1000 条。如果你想达到预期的输出,那么你可以使用php的array_chunk函数或laravel的collection。 例如使用 array_chunk :

$chuncked = array_chunk($inserts, 1000);

foreach($chuncked as $insert){
   \DB::table('xp_pn_ura_transactions')->insert($insert);
}

关于php - Laravel maatwebsite excel包导入2000+行导致1390代码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59242175/

相关文章:

javascript - jQuery 无法删除父 div

php - 如何在php中使用管理员和用户制作登录表单

PHP编码问题

php - 无法在 PHP 中连接到 MySQL

mysql - 用IN选择,过滤匹配的结果

java - 使用 jxl api 将图像插入 Excel 单元格

php - 使用 SQL 查询在 PHP 中生成二维数组

php - 加入 where and less then 条件

excel - 在 Excel 中生成随机单词列表,但没有重复

excel - 将列范围定义为 INDEX 函数的多个值