嵌套的foreach循环在php中查询

时间:2014-01-08 13:39:56

标签: php sql foreach nested-loops

我试图在我的数据库中插入数据。看起来应该是这样的 -

     a_id=1 s_id=1 q_id=1
     a_id=1 s_id=1 q_id=2
     a_id=1 s_id=2 q_id=1
     a_id=1 s_id=2 q_id=2

现在它插入这样的东西 -

     a_id=1 s_id=1 q_id=null
     a_id=1 s_id=2 q_id=null
     a_id=1 s_id=1 q_id=1
     a_id=1 s_id=1 q_id=2
     a_id=1 s_id=2 q_id=1
     a_id=1 s_id=2 q_id=2

我一直在打它很长时间。如果有人能够对此有所了解,请告诉我。这是我的代码 -

    $aid=$_GET['id'];
    $sdata=XYZ::model()->findAll('a_id=:aid',array(':aid'=>$id));
    $qdata=ABC::model()->findAll('a_id=:aid',array(':aid'=>$id));
    $sql='insert into assignment_answers
                (a_id, s_id, q_id)
                values (:aid, :sid, :qid)';
            $command1=$connection->createCommand($sql);
            foreach($sdata as $sd)
            {
                foreach($qdata as $qd)
                {
                    $sid=$sd->id;
                    $command1->bindParam(":sid",$sid,PDO::PARAM_STR);
                    $qid=$qd->id;
                    $command1->bindParam(":qid",$qid,PDO::PARAM_STR);
                    $command1->bindParam(":aid",$aid,PDO::PARAM_STR);
                    $command1->execute();
                }
            }

1 个答案:

答案 0 :(得分:-1)

你需要3个foreach循环:1个用于$ adata,1个用于$ sdata& $ for qdata。

$sql='insert into assignment_answers
            (a_id, s_id, q_id)
            values (:aid, :sid, :qid)';
$command1=$connection->createCommand($sql);
foreach($adata as $ad)
{
    foreach($sdata as $sd)
    {
        foreach($qdata as $qd)
        {
            $command1->bindParam(":aid",$ad->id,PDO::PARAM_STR);
            $command1->bindParam(":sid",$sd->id,PDO::PARAM_STR);
            $command1->bindParam(":qid",$qd->id,PDO::PARAM_STR);
            $command1->execute();
        }
    }
}

我认为你还有$ adata设置,如$ sdata& $ Q数据。