2012-01-22 117 views
0

我只是在我的网站上实现PDO,但我想知道是否可以多次执行预准备语句?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 

回答

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查询中,而不需要像这样循环。

+2

最后一个理智的答案。 –

3

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

当然,我不确定你为什么要在一个循环中做一个SELECT ......通常没什么意义。

+0

我该怎么做才能得到数据库?我不确定,我曾经使用mysql_query的旧方法(“SELECT ... – hellomello

+0

@andrewliu,目前还不清楚你在问什么,为什么不选择一次并遍历结果数据? SELECT'一遍又一遍? – Brad