У меня есть случай, когда я хочу использовать результаты подготовленного оператора более одного раза во вложенном цикле. Внешний цикл обрабатывает результаты другого запроса, а внутренний цикл - результаты подготовленного запроса оператора. Таким образом, код будет выглядеть примерно так (просто «псевдо» для демонстрации концепции):
// not showing the outer query, it is just a basic SELECT, not prepared statement
// we'll call it $outer_query
$obj_array = array(); // going to save objects in this
$ids = array(18,19,20); // just example id numbers
$query = "SELECT field1, field2 FROM table1 WHERE id=?";
$stmt = $db->prepare($query);
foreach ($ids as $id) {
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($var1, $var2);
$stmt->store_result(); // I think I need this for data_seek
while ($q1 = $outer_query->fetch_object()) {
while ($stmt->fetch()) {
if ($q1->field1 == $var1) { // looking for a match
$obj = new stdClass();
$obj->var1 = $var1;
$obj->var2 = $var2;
$obj_array[] = $obj;
$stmt->data_seek(0); // reset for outer loop
break; // found match, so leave inner
}
}
}
}
Проблема, с которой я, похоже, сталкиваюсь, заключается в том, что значения не привязываются к переменным, как я ожидаю после первого использования fetch во внутреннем цикле. В частности, в одном примере я использовал 3 идентификатора для foreach, первый идентификатор был обработан правильно, второй обработан неправильно (совпадения не были найдены во внутреннем цикле, даже если они существовали), а затем третий был обработан правильно. 1004 *
Что-то не так с подготовленными вызовами функции статистики в последовательности, которую я делаю выше, или это неверный способ использования результатов подготовленного оператора?
Спасибо.