Да, вы можете повторно использовать то же самое подготовленное утверждение, но не так, как оно есть в вопросе. То, что вы пытаетесь сделать, по сути то же самое, что делать это:
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-запросе без необходимости циклически повторять его следующим образом.