중첩 루프에서 준비된 명령문의 결과를 두 번 이상 사용하려는 경우가 있습니다. 외부 루프는 다른 쿼리의 결과를 처리하고 내부 루프는 준비된 명령문 쿼리의 결과입니다. 그래서 코드는이 (그냥 "pseudoish"개념을 설명하기) 같은 것입니다 : 내가 경험 것으로 보인다PHP, MySQL prepared statements - data_seek (0)을 호출하여 두 번 이상 실행 한 결과를 사용할 수 있습니까?
// 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
}
}
}
}
문제 것은 값이 난 후 예상하는대로 변수에 바인딩되지 않아요이다 처음에는 내부 루프에서 가져 오기를 사용합니다. 특히 foreach에 대해 3 개의 id를 사용하여 실행 한 경우 첫 번째 ID가 올바르게 처리되고 두 번째 ID가 잘못 처리되었으며 (존재하는 경우에도 내부 루프에서는 일치하지 않음) 세 번째 ID가 올바르게 처리되었습니다.
위에서 수행 한 시퀀스에서 준비된 statment 함수 호출에 문제가 있습니까? 아니면 준비된 명령문의 결과를 사용할 수없는 잘못된 방법입니까?
감사합니다.
당신은 더 나은 사용을 거라고
실제 상황은 위에서 설명한 것보다 더 복잡하며 단일 쿼리를 만들기위한 JOIN이 작동하지 않습니다. 위의 내용을 알고 싶다면 위의 루프 에서처럼 준비된 문을 사용하는 개념에 문제가 있거나 동일한 결과를 여러 번 다시 설정하거나 가져올 수없는 이유가 분명하지 않은 것입니다. 제안 주셔서 감사하지만 그것은 내 질문에 정말로 대답하지 않습니다. –
죄송합니다 @ 카르벨하지만 그건 불가능합니다. JOIN을 사용하면 쿼리가 작동하지 않을 수 있습니다. 경험이 부족해서 잘못 가고있는 것뿐입니다. 잘못된 방법을 고수하는 대신 올바른 방법을 배우는 것이 좋습니다. 그것은 인생입니다. 때때로 우리가 가진 대답은 우리가 묻는 대답이 아닙니다. –
나는 당신과 나는 의사 소통에 실패하고 있다고 생각한다. 나는 내가 가진 문제를 발견했다. (아래 참조). 나는 하나의 쿼리에서 필요한 결과를 얻을 수있는 방법이 있는지 재검토했지만,이 경우에는 작동하지 않을 것이라고 생각합니다. 나는 실제 상황의 모든 복잡성에 들어가기를 원하지 않았다. 문제가 너무 길어서 모든 세부 사항을 갖추지 못하는 단점이 있었기 때문이다. 미안합니다. 입력 해 주셔서 다시 한 번 감사드립니다. 매우 감사. –