php pdo插入循环

时间:2012-11-23 18:37:33

标签: php loops pdo

为什么语句1按预期工作,这意味着它将在每一行中插入不同的值。但是语句2总是为每个父循环插入相同的内容,因此对于执行语句2的每个子for​​each,都会有重复的行?

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++;
    }
}

1 个答案:

答案 0 :(得分:0)

这只是一个错字。 在第二个子for​​each中,我写了“foreach($ value ...)”而不是“foreach($ subval ...)”。 我现在讨厌自己-.-