【问题标题】:Laravel - prepared statement contains too many placeholdersLaravel - 准备好的语句包含太多占位符
【发布时间】:2015-03-14 13:10:52
【问题描述】:

我想知道是否有人可以帮我一把。

我编写了一个导入脚本,它适用于少量点,但是当我开始导入大量点时,我收到以下错误:

General error: 1390 Prepared statement contains too many placeholders

我用来导入的代码如下:

foreach ( $items as $item ) {

    $insert[] = array(

        'userid' => User::current()->id,
        'lati' => $item[0],
        'long' => $item[1],
        'streetNumber' => $item[2],
        'streetName' => $item[3],
        'country' => $item[6],
        'state' => $item[5],
        'pcode' => $item[7],
        'suburb' => $suburb,
        'created_at' => new DateTime,
        'updated_at' => new DateTime

    );

}

if(DB::table('mytable')->insert($insert))
{

    return true;

} else {

    return false;           

}   

任何有关如何解决此问题的帮助将不胜感激。

【问题讨论】:

  • ca 65k 的查询中有占位符(? 绑定)的限制。所以只需分批插入即可。

标签: php laravel laravel-4


【解决方案1】:
function addData($items) {
    $itemsTemp = [];
    if (count > 1000) {
        $itemsTemp = array_slice($items, 1000);
        $items = array_slice($items, 0, 1000);
    }
    foreach ( $items as $item ) {

        $insert[] = [

            'userid' => User::current()->id,
            'lati' => $item[0],
            'long' => $item[1],
            'streetNumber' => $item[2],
            'streetName' => $item[3],
            'country' => $item[6],
            'state' => $item[5],
            'pcode' => $item[7],
            'suburb' => $suburb,
            'created_at' => new DateTime,
            'updated_at' => new DateTime

        ];

    }
    if (DB::table('mytable')->insert($insert)) {
        if ($itemsTemp) {
            addData($itemsTemp);
        }
    } else {
        return false;
    }
    return true;


}

【讨论】:

  • 带有 cmets 或解释的代码真的没有帮助。
  • 请提供一些解释
猜你喜欢
  • 2019-03-18
  • 2022-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 2020-02-29
相关资源
最近更新 更多