tp5.1 php SQLSTATE(HY000]: General error: 1390 Prepared statement contains too many placeholders

文章讲述了在ThinkPHP5.1中使用`insertAll`方法批量添加数据时遇到的MySQL预处理语句限制问题,提出了解决方案:当数据量超过限制时,通过分批插入来避免错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景:

使用thinkphp5.1 insertAll($sonVl) 批量添加数据时,报了上边的错误
在这里插入图片描述

原因:

MySQL的一个限制,即预处理语句中占位符(placeholder)的数量不能超过一定数量。这个限制在MySQL 5.6及更早版本中是1000个,在MySQL 5.7及更高版本中放宽到10万个。

解决:

将数据 分批插入即可

示例:

self::chunk_insert_data($vl, $member_db_config, $vk);

/**
     * 分批添加数据
     * @param array $insert_data 需要添加的数据 1
     * @param array $db_config 数据库连接信息 1
     * @param string $table_name 数据表名 1
     * @return mixed
     * @author xuefeiniao
     * @date 2023/11/3 5:56 下午
     */
    public function chunk_insert_data(array $insert_data, array $db_config, string $table_name)
    {
        if (count($insert_data) > 500) {
            $newVl = array_chunk($insert_data, 500);
            foreach ($newVl as $sonVl) {
                Db::connect($db_config)
                  ->table($table_name)
                  ->insertAll($sonVl);
            }
        } else {
            Db::connect($db_config)
              ->table($table_name)
              ->insertAll($insert_data);
        }

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值