2015-01-16 53 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