2012-11-23 137 views
0

爲什麼語句1按預期工作,這意味着它會在每行中插入不同的值。但是語句2總是爲每個父循環插入相同的語句,因此對於執行語句2的每個子排除行將會有重複的行?php pdo插入循環中

function insert($db, $data) 
{ 
    $stmt1 = $db->prepare(" 
      INSERT INTO table1(
       `order`, `parent_id`, `caption`, `caption2` 
      ) VALUES(
       :order, :parent_id, :caption, :caption2, 
      ) 
     "); 
    $stmt2 = $db->prepare(" 
        INSERT INTO table2(
        `id`, `order`, `caption` 
      ) VALUES(
        :id, :order, :caption 
      ) 
      "); 

    $count = 1; 
    foreach ($data as $foo => $value) { 
     $stmt1->bindValue(':order', $count, PDO::PARAM_INT); 
     $stmt1->bindValue(':parent_id', 0, PDO::PARAM_INT); 
     $stmt1->bindValue(':caption', !array_key_exists('caption', $value) || is_null($value['caption']) ? '' : $value['caption'], PDO::PARAM_STR); 
     $stmt1->bindValue(':caption2', !array_key_exists('caption2', $value) || is_null($value['caption2']) ? '' : $value['caption2'], PDO::PARAM_STR); 
     $stmt1->execute(); 
     $parentId = $db->lastInsertId(); 

     if (array_key_exists('bar', $value)) { 
      $tabCount = 1; 
      foreach ($value['bar'] as $bez) { 
       $stmt2->bindValue(':order', $tabCount, PDO::PARAM_INT); 
       $stmt2->bindValue(':id', $parentId, PDO::PARAM_INT); 
       $stmt2->bindValue(':caption', $bez, PDO::PARAM_STR); 
       $stmt2->execute(); 
       $tabCount++; 
      } 
     } 

     if (array_key_exists('sub', $value)) { 
      $subcount = 1; 
      foreach ($value['sub'] as $sub => $subval) { 
       $stmt1->bindValue(':order', $subcount, PDO::PARAM_INT); 
       $stmt1->bindValue(':parent_id', $parentId, PDO::PARAM_INT); 
       $stmt1->bindValue(':caption', !array_key_exists('caption', $subval) || is_null($subval['caption']) ? '' : $subval['caption'], PDO::PARAM_STR); 
       $stmt1->bindValue(':caption2', !array_key_exists('caption2', $subval) || is_null($subval['caption2']) ? '' : $subval['caption2'], PDO::PARAM_STR); 
       $stmt1->execute(); 
       $subParentId = $db->lastInsertId(); 
       $subcount++; 

       if (array_key_exists('bar', $value)) { 
        $tabSubCount = 1; 
        foreach ($value['bar'] as $bezSub) { 
             $stmt2->bindValue(':order', $tabSubCount, PDO::PARAM_INT); 
             $stmt2->bindValue(':id', $subParentId, PDO::PARAM_INT); 
             $stmt2->bindValue(':caption', $bezSub, PDO::PARAM_STR); 
             $stmt2->execute(); 
         $tabSubCount++; 
        } 
       } 

      } 
     } 

     $count++; 
    } 
} 
+0

你做任何理由'$ tabellenCount = 1',但在循環內使用'$ tabCount'? –

+0

不只是一個錯字,我替換了所有德語單詞,所以它更容易閱讀,但忘了這一個 – DarsVaeda

+0

Ewww,使用NOT和||在三元內...... array_key_exists('caption',$ value)|| is_null($ value ['caption'])? '':$ value ['caption'] – VBAssassin

回答

0

這只是一個錯字。 在第二個子for​​each中,我寫了「foreach($ value ...)」而不是「foreach($ subval ...)」。 現在我討厭自己了-.-