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

ca 65k의 쿼리에는 자리 표시 자 ('? '바인딩)의 한계가 있습니다. 삽입을 배치로 처리하십시오. –

답변

-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

관련 문제