PDO预处理语句执行多次?(pdo prepared statement multiple exec

2019-09-29 10:10发布

我刚开始在我的网站来实现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

Answer 1:

是的,你可以重复使用同一个事先准备好的声明,但不知道如何你有它的问题。 你所要做的本质是一样的这样做:

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查询,而不需要遍历像这样。



Answer 2:

对的,这是可能的。 一旦准备好,因为你需要执行多次。

当然,我不知道为什么你正在做一个SELECT在一个循环......通常没有太大的意义。



文章来源: pdo prepared statement multiple execution?