我刚开始在我的网站来实现PDO但我想知道是否有可能执行准备好的声明中多次吗?
$SQL = $dbh->prepare("SELECT * FROM user WHERE id=? AND users=?");
$SQL -> execute(array($id,$userid));
while($check = $SQL -> fetchObject()){
然后我会用while循环这个SQL
我可以使用相同的SQL $在while循环中的另一个执行? 所以我没有在准备好的声明中再次键入?
$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
是的,你可以重复使用同一个事先准备好的声明,但不知道如何你有它的问题。 你所要做的本质是一样的这样做:
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查询,而不需要遍历像这样。
对的,这是可能的。 一旦准备好,因为你需要执行多次。
当然,我不知道为什么你正在做一个SELECT
在一个循环......通常没有太大的意义。