2015-02-11 156 views
0

以下PHP代碼工作正常時,只有一組數組值在POST,即在索引值0 ...當索引值大於1時,重複的條目被插入到表中..請幫助...在數據庫中批量插入

$sql = "INSERT INTO js (s_name, s_age, s_marks, s_school) VALUES "; 
foreach($_POST as $objResult) 
    { 
    $i = 0; 
    foreach($objResult as $Result){ 
     $i++; 
     if($i>1)// add ',' after first set of values in INSERT.. 
     { 
      $sql .= ","; 
     } 
     $name = $Result['sname']; 
     $age = $Result['age']; 
     $mark = $Result['mark']; 
     $school = $Result['school']; 
     $sql .= "('".$name."','" .$age."','".$mark."','" .$school."')"; 
$result=$conn->query($sql); 
    }}   
+0

代碼將無法'$ SQL =「( 「。implode(',',$ Result)。」)「;'做,沒有所有你正在進行的愚蠢行爲? – Darren 2015-02-11 06:21:49

+1

您也可以嘗試設置一個唯一約束作爲快速修復。 – 2015-02-11 06:29:07

回答

0

謝謝你的建議。我改變了我的代碼如下..

$sql = "INSERT INTO js (s_name, s_age, s_marks, s_school) VALUES "; 
 
foreach($_POST['student'] as $Result) 
 
\t { 
 
     $name = $Result['sname']; 
 
     $age = $Result['age']; 
 
     $mark = $Result['mark']; 
 
     $school = $Result['school']; 
 
     $sql .= "('".$name."','" .$age."','".$mark."','" .$school."'),"; 
 

 
    } 
 
$sql = rtrim($sql,","); 
 
$result=$conn->query($sql);

1

您可以完全消除任何問題,所有這一切迭代你做這樣的事情怎麼回事:

foreach($_POST as $objResult) { 
    foreach($objResult as $Result) { 
     $sql .= "(" . implode(', ', $Result) . "),"; 
    } 
} 
$result=$conn->query($sql); 

現在你看到我是如何的感動查詢你的循環?這確保您正確運行它,而不是每次迭代(循環)數據。


下面是一個工作Example你將不得不按ctrl + enter運行代碼

+0

好的...這是有幫助的... – 2015-02-11 09:00:51

0

你需要移動

$result=$conn->query($sql); 

從內循環,你沒有清除字符串,所以它會繼續添加已經添加的條目。

0

你可以改變這樣的

foreach($_POST as $objResult) { 
 
    foreach($objResult as $Result) { 
 
     $sql .= "(" . implode(', ', $Result) . "),"; 
 
    } 
 
} 
 
$result=$conn->query($sql);