<legend id="a5jtk"></legend>

  • <video id="a5jtk"><pre id="a5jtk"><p id="a5jtk"></p></pre></video>
      <meter id="a5jtk"><listing id="a5jtk"><address id="a5jtk"></address></listing></meter>
    1. <small id="a5jtk"><form id="a5jtk"><em id="a5jtk"></em></form></small>

          1. <small id="a5jtk"><table id="a5jtk"><td id="a5jtk"></td></table></small>

            最近在批量迁移数据写入到mysql表中的时候,出现一下报错。

            SQLSTATE[HY000]: General error: 1390 Prepared statement contains too many placeholders.

            查看mysql官网解释:
            Error: 1390 SQLSTATE: HY000 (ER_PS_MANY_PARAM)

            Message: Prepared statement contains too many placeholders

            原因分析:
            mysql使用PDO进行写入的时候,PDO支持最大占位符为65535。

            当insert的表为6列(即6个字段),写入记录的行数为11000时,则insert的总占位符为:6x11000=66000.

            66000大于mysql最大占位符为65535,故而mysql报错。

            结论:写入数据为m列,n行。m*n必须小于65535。


            我的解决办法是:

                例子:数据量2千条,字段50个;

                将数组进行拆分;每1千条数据为一组,进行批量写入;

                使用array_slice()进行拆分!

            $limit    = 1000;// 每组1千条数据
            $ArrCount = count($Orders);// 获取数组总数
            // 如果数组总数大于1000 就进行分数组插入
            if($ArrCount > $limit) {
            
                // 计算要分成多少个数组;
                $arrCount = ceil($ArrCount/$limit);// 向上取整
            
                for($i=0;$i<$arrCount;$i++) {
                    $tmp = [];
                    // 开始截取的位置
                    $start = ($limit * $i); // 1000-1 * 0 = 0
                    // 每次取一千条  数组分组
                    $tmp = array_slice($Orders,$start,$limit);
                    //数据不为空就写入数组新数组中
                    if(!empty($tmp)) {
                        // 写入临时订单表,将分组后的数组写入表中
                        $res = DB::table('customs_elec_order_tmp')->insert($tmp);
                        if(!empty($res)) {
                            $flag = true;
                        }
                    }
                    $tmp = [];
                }
                // 释放内存
                unset($Orders);


            0/300
            全部评价
            本港台聊天室-本港台六开彩开奖结果-本港台六开奖结果