pdo准备语句多次执行?

时间:2012-01-22 04:02:27

标签: php pdo prepared-statement execute

我刚刚在我的网站上实现PDO,但我想知道是否可以多次执行预准备语句?

$SQL = $dbh->prepare("SELECT * FROM user WHERE id=? AND users=?");
$SQL -> execute(array($id,$userid));
while($check = $SQL -> fetchObject()){

然后我会为这个SQL使用while循环

我可以在while循环中使用相同的$ SQL进行另一次执行吗?所以我不必再次输入准备好的声明了吗?

$SQL -> execute(array($id2,$userid2));
while($check2 = $SQL ->fetchObject(){
//while loops for second execution, but I'm not sure how it works cause 
//its using the same $SQL?
    }
    }//this end bracket is for the first while loop

2 个答案:

答案 0 :(得分:3)

是的,有可能。准备一次,根据需要执行多次。

当然,我不确定你为什么在循环中做SELECT ...这通常没有多大意义。

答案 1 :(得分:3)

是的,您可以重复使用相同的预备语句,但不能重复使用问题。你要做的事情与这样做基本相同:

for ($i=0; $i<$some_number; $i++) {
    echo $i."\n";
    for ($i=0; $i<$some_number; $i++) {
        // do something
    }
}

第二个for循环移动与原始循环相同的指针,因此上面的输出只是“0”,表示原始for循环仅发生一次。

因此,为了解决这个问题,您需要将第一个execute的结果存储到数组中,然后迭代它。这样你就不用担心任何指针了

$SQL = $dbh->prepare("SELECT * FROM user WHERE id=? AND users=?");
$SQL->execute(array($id,$userid));
$checks = $SQL->fetchAll();
foreach ($checks as $check) {
    $SQL->execute(array($id2,$userid2));
    while ($check2 = $SQL->fetchObject(){
        //while loops for second execution
    }
}

这样,您使用完全相同的预准备语句(这很好),原始$check变量可用于while循环。

然而,尽管如此,我还是有一种强烈的预感,你可以把所有东西都集成到一个单一的SQL查询中,而不需要像这样循环它。