2012-11-23 138 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 ...)”。 现在我讨厌自己了-.-