场景:
使用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);
}
}