2012-01-22 5 views
0

Я просто пытаюсь реализовать PDO на своем сайте, но мне было интересно, можно ли выполнить подготовленный оператор несколько раз?pdo подготовлен заявление несколько осуществление?

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

, а затем я хотел бы использовать время цикла для этого SQL

Могу ли я использовать один и тот же $ 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 

ответ

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

Смежные вопросы