【问题标题】:Eloquent whereIn error:1390 Prepared statement contains too many placeholders laravel 5.7Eloquent whereIn error:1390 Prepared statement contains too many placeholders laravel 5.7
【发布时间】:2019-05-02 09:58:54
【问题描述】:

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

$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 arps where msisdn in (?, ?, ?, ?,....................

很多? ...

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

【问题讨论】:

  • 问题的准确副本:laravel.io/forum/… ???怎么样??
  • 不适合我
  • 这是你的真实代码?否则发布真实代码
  • 似乎您陷入了 MySQL/MariaDB 占位符限制。大约是65k。尝试通过拆分 $idsList 来分隔您的查询
  • @YandraAdie 看到我的回答。

标签: php laravel


【解决方案1】:

使用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 中获得您的总数

【讨论】:

  • whereNotIn 呢?
猜你喜欢
  • 2013-08-08
  • 2019-04-20
  • 1970-01-01
  • 2021-12-31
  • 2017-04-01
  • 1970-01-01
  • 2017-02-18
  • 2014-07-26
  • 2011-07-15
相关资源
最近更新 更多