首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >1390预准备语句包含太多使用Laravel 5.6的占位符

1390预准备语句包含太多使用Laravel 5.6的占位符
EN

Stack Overflow用户
提问于 2018-10-14 18:10:20
回答 2查看 4.9K关注 0票数 1

获取以下错误的

SQLSTATEHY000:常规错误: 1390预准备语句包含的占位符太多

由于最近表中的数据,我的查询已变为

SELECT
  *
FROM
  table
WHERE col1 = 'some-val'
  AND col2 NOT IN ('va1', 'val2', 80k values... )

我使用的是Laravel 5.6

$data_will_be_skipped = OtherModel::select('code')
        ->where('col1', 0)
        ->orWhere('col2', 1)
        ->groupBy('col3')
        ->pluck('col3')->toArray();

$data_will_be_skipped现在大约是80k阵列

Model::where('col1', 'some-val')->whereNotIn('col2', $data_will_be_skipped)->get();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-15 01:35:46

MySQL在预准备语句中有65,535个参数的限制。

请改用子查询:

$data_will_be_skipped = OtherModel::select('col3')
    ->where('col1', 0)
    ->orWhere('col2', 1);
Model::where('col1', 'some-val')
    ->whereNotIn('col2', $data_will_be_skipped)
    ->get();
票数 3
EN

Stack Overflow用户

发布于 2021-10-05 12:28:35

不管数组中有多少项要检查,其中

做这件事的简单方法

$data = model::whereRaw("id not in (".implode(',',$data_will_be_skipped).")")->get();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52801606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档