我刚刚在我的网站上实现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
答案 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查询中,而不需要像这样循环它。