2013-07-19 3 views
2

mysqli prepared statements와 결과 set을 이해하면 모든 서버 측에 저장된다는 의미이므로 한 번에 사용할 수있다. 이것은 첫 번째 쿼리의 결과를 사용하여 두 번째 쿼리를 반복하고 실행하려고 할 때 문제가됩니다.mysqli 준비 문을 배열로 읽어 들인다.

내 코드가 첫 번째 결과 집합에서 읽으려고 했으므로 루프를 통해 읽고 읽을 수 있습니다.

$sql = 'SELECT VISIT_ID, UPRN, VISIT_REF, VISIT_DATE, START_TIME, END_TIME, NOTES, REALNAME from V_PREVIOUS_VISITS where UPRN = ?'; 

/* Prepare statement */ 
$stmt = $db->prepare($sql); 
if($stmt === false) { 
    trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $db->error, E_USER_ERROR); 
} 

$VisitArray = array(); 
$stmt->bind_param('i',$_GET['UPRN']); 
$stmt->execute(); 

$result = $stmt->fetch(); 

while ($row = $result->fetch_assoc()){ 
    $VisitArray[]= $row; 
}; 

$stmt->free_result(); 

foreach($VisitArray as $Visititem){ 
?> 
Visit Ref:<?=$Visititem['VISIT_REF']?><br/> 
Visit Date:<?=$Visititem['VISIT_DATE']?><br/> 
Conducted by:<?=$Visititem['REALNAME']?><br/> 
Notes:<?=$Visititem['NOTES']?><br/> 
Rates:<br/> 
    <? 
    } 
    ?> 

내가 지금 mysqli_stmt 클래스와 mysqli_result 클래스와 어떻게 문 클래스에서 호출 된 일에 대한 결과 클래스에서 배열 방법을 사용할 수 있습니다 사이에 혼란 스러워요. 코딩에 대한 지식이 부족하다는 점에 감사드립니다. - 죄송합니다.

+0

+1 적절한 오류 처리 만 수행하십시오. 이러한 모든 구제 중 trigger_error를 한번에 볼 수있는 그런 구제가 있다면 –

+0

get_result()를 시도해 볼 수 있습니다. 사용할 수 없다면, 그 추악한 bind_result() –

+0

그걸로 보일 것입니다 :'$ result = $ stmt-> get_result(); '트릭을 잊어 버린다. 그래서 그것은 get_result가 mysqli_result 클래스를 생성 할 것입니다. – Culture

답변

0

그냥 대답을 위해서.

get_result()를 시도 할 수 있습니다. 사용할 수 없다면, 그 못생긴 bind_result()를 get_result_metadata() 및 nd와 결합하여 사용해야합니다. bind_result의 매뉴얼 페이지에는 많은 예제 코드가있다.

관련 문제