|
- 遇到一个奇葩的报错 SQLSTATE[HY000]: General error: 1390 Prepared statement contains too many placeholders
复制代码
这个报错怎么回事呢:
1. 我利用DB门面进行了数据批量导入【上传xls文件】。
2. 使用的 语句是:
- // $res = DB::table($xlistName)->insert($array[0]);
复制代码 3.实践证明 单次导入是正常的。数据量小于5000条 一点问题没有;
4.后来我上传了大概两万多条 这条语句就报错 1390了 。其实就是 插入的列和插入的行 m*n 大于 65535
5.解决方法[失败版]: 我看了很多 上来就用laravel 的 chark 的。 好神奇的样子。就是我看不懂
6.当时的解决办法:利用 array_chunk 进行数组拆分
- // 获取新建的表名
- $xlistName = Cache::get('xlist');
- // 拆开了再存[ 一次性插入过大就凉凉 所以拆开 ] $mmm 是 需要载入的数据
- $t = array_chunk($mmm,4000);
- // 分批次批量导入
- foreach ($t as $v) {
- DB::table($xlistName)->insert($v);
- }
复制代码
|
|