首页 > 解决方案 > Eloquent whereIn error:1390 Prepared statement contains too many placeholders laravel 5.7

问题描述

我有一个这样的简单查询:

$arp_terhadap_st_reg = Sfs::select('msisdn')->wherebetween('created', [$datefrom, $dateto])->where('cluster',$cluster)->pluck('msisdn');

$arp_outlet_reg = Arps::whereIn('msisdn',$arp_terhadap_st_reg)->count();

这里,$idList 是一个数组,其中包含用户 id,我有超过 60000 个 id。

每次,代码都会告诉我:

"error":{"type":"Exception","message":"SQLSTATE[HY000]: General error: 1390 Prepared statement contains too many placeholders

SQL: select count(*) as aggregate from arpswhere msisdnin (?, ?, ?, ?, ...................

许多 ?...

那么,我该如何解决这个问题。谢谢。

标签: phplaravel

解决方案


array_chunk像下面这样使用

$arp_terhadap_st_reg = Sfs::select('msisdn')->wherebetween('created', [$datefrom, $dateto])->where('cluster',$cluster)->get()->toArray();

$arp_outlet_count = 0;

foreach (array_chunk($arp_terhadap_st_reg, 1000) as $arp_terhadap_st) {
    $arp_outlet_reg = Arps::whereIn('msisdn',$arp_terhadap_st)->count();
    $arp_outlet_count = $arp_outlet_count + $arp_outlet_reg;
}

你会得到你的总计数$arp_outlet_count


推荐阅读