2013-03-29 62 views
0

我有一個插入兩個獨立數據庫表的腳本:配料和方向。 對於第一個,我使用$this->db->query($sql),對於第二個:$this->db->query($sql2)(我正在使用CodeIgniter)。 這裏是我的代碼:數據庫插入是否合併?

foreach($_POST as $key => $value) { 
     $value = $this->input->post($key); 
     $directions = $this->input->post('directions'); 
     $ingredientQTY = $this->input->post('ingredientQTY'); 
     $measurements = $this->input->post('measurements'); 
     $ingredientNAME = $this->input->post('ingredientNAME'); 
     $ingredientsROW[] = array($ingredientQTY, $measurements, $ingredientNAME); 

     //For inserting ingredients 
     for ($i = 0, $count = count($ingredientQTY); $i < $count; $i++) { 
      $rows[] = array(
       'ingredientamount'  => $ingredientQTY[$i], 
       'ingredientType'  => $measurements[$i], 
       'ingredientname'  => $ingredientNAME[$i], 
       'recipe_id'    => $recipe_id, 
       'order'     => $i + 1, 
       'user_id'    => $user_id 
      ); 
      $sql = "INSERT `ingredients` (`ingredientamount`,`ingredientType`,`ingredientname`,`recipe_id`, `listOrder`, `user_id`) VALUES "; 
      $coma = ''; 
      foreach ($rows as $oneRow) { 
       $sql .= $coma."('".implode("','",$oneRow)."')"; 
       $coma = ', '; 
      } 

     } 
     $this->db->query($sql);//Insert Query for ingredients 

     //For inserting directions 
     for ($i = 0, $count = count($directions); $i < $count; $i++) { 
      $rows[] = array(
       'direction'  => $directions[$i], 
       'recipe_id'    => $recipe_id, 
       'order'     => $i + 1, 
       'user_id'    => $user_id 
      ); 
      $sql2 = "INSERT `directions` (`direction`,`recipe_id`,`listOrder`,`user_id`) VALUES "; 
      $coma = ''; 
      foreach ($rows as $oneRow) { 
       $sql2 .= $coma."('".implode("','",$oneRow)."')"; 
       $coma = ', '; 
      } 
     } 
     $this->db->query($sql2); //Insert Query for directions 
     break; 
    } 

我應該有兩個單獨的SQL語句,但出於某種原因,他們組合成,並生成以下錯誤:

Column count doesn't match value count at row 1 

INSERT `directions` (`direction`,`recipe_id`,`listOrder`,`user_id`) VALUES ('1','Bunch','Cilantro','1','1','1'), ('3','Cup','Sugar','1','2','1'), ('First, combine the cilantro and sugar','1','1','1'), ('then eat. ','1','2','1') 

應該有一個INSERT ingredients以及,但它的值合併到INSERT directions聲明中。

爲什麼要將這兩個SQL語句組合起來?

+0

@PreetSangha,有2個($方向) – Muhambi

回答

1

代碼上半年建立$rows插入所有成分,那麼下半年建立$rows插入四面八方,但它從來沒有清除了$rows插圖中。當你去做指導時,成分仍然在陣列中。

另外,我認爲你經常調用SQL。您的for $i循環和foreach $rows循環不應嵌套;他們應該是一個接着一個。嘗試是這樣的:

for ($i = 0, $count = count($ingredientQTY); $i < $count; $i++) { 
    $rows[] = array(
    'ingredientamount' => $ingredientQTY[$i], 
    'ingredientType' => $measurements[$i], 
    'ingredientname' => $ingredientNAME[$i], 
    'recipe_id'  => $recipe_id, 
    'order'   => $i + 1, 
    'user_id'   => $user_id 
); 
} // <-- FIRST FOR LOOP SHOULD END HERE 

$sql = "INSERT `ingredients` (`ingredientamount`,`ingredientType`,`ingredientname`,`recipe_id`, `listOrder`, `user_id`) VALUES "; 
$coma = ''; 
foreach ($rows as $oneRow) { 
    $sql .= $coma."('".implode("','",$oneRow)."')"; 
    $coma = ', '; 
} 
// } <-- FIRST FOR LOOP USED TO END HERE; PROBABLY NOT RIGHT 

$this->db->query($sql);//Insert Query for ingredients 

$rows = array(); // <-- Clear out $rows to reuse it for directions 

隨着$rows陣列清除出去,那麼你可以去到的方向。與成分一樣,將循環一個接一個,而不是嵌套。

+0

修復了這個問題,使我的代碼更好,謝謝! – Muhambi

-1
$sql2 = "INSERT directions ('direction','recipe_id','listOrder','user_id') VALUES "; 

第一組括號指定4列,但您嘗試插入6個值。

固定碼:

$sql2 = "INSERT INTO directions VALUES "; 
+0

感謝您的答案!我從行數組中獲取值,所以實際上有4列和4個值,所以這是行不通的。 – Muhambi

+0

來自錯誤的6個值實際上應該插入到成分聲明中,但出於某種原因被添加到插入方向而不是 – Muhambi

+0

更改'$ sql2 =「INSERT INTO方向VALUES」中的'directions';到'成分':) :) –