2015-01-16 2 views
3

Мне интересно, может ли кто-нибудь дать мне руку.Laravel - подготовленное заявление содержит слишком много заполнителей

Я написал сценарий импорта, он отлично работает для небольшого количества точек, но когда я начала импортировать большое количество, я получаю следующее сообщение об ошибке:

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;   

} 

Любая помощь при определении того, как исправить это, будет очень признательна.

+5

В запросе около 65 тыс. Существует ограничение заполнителей ('?' Привязок). Так что просто вставляйте партии. –

ответ

-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; 


} 
+1

Код с комментариями или объяснением действительно не помогает. – jonlink

Смежные вопросы