2013-09-26 4 views
1

PHP가 새롭기 때문에 아마도 너무 많이하려고합니다.가져 오기에서 객체로 배열 채우기

개체 그룹이 있고 데이터베이스에서 모든 그룹을 가져와 내보기로 보내기 전에 배열로 푸시합니다.

그래서 내가 가진 :

$groups=array(); 
$group=new Group(); 
$stmt=$databaseconnection->prepare("SELECT Id, Name, Description FROM Groups"); 
$stmt->execute(); 
$stmt->bind_result($group->Id, $group->Name, $group->Description); 

while($stmt->fetch()){ 
    $groups[]=$group; 
    $group=new Group(); 
    } 

return $groups; 

이 내가 배열이 있어야 요소의 총 번호 요소의 배열을 반환하지만 그들은 마지막 요소로 모두 동일합니다. 3 그룹이 있고 마지막 하나가 "사용자"인 경우 3 개의 요소가 모두 "사용자"인 배열이 있습니다.

왜 이런 일이 발생합니까? 이 일을하는 가장 좋은 방법은 무엇입니까?

감사합니다.

답변

0

bind_result는 각 가져 오기 호출시 변수에 열을 저장하므로 매번 새 그룹을 만들고 해당 그룹의 데이터 멤버를 적절한 값으로 설정해야합니다.

... 
$stmt->bind_result($id, $name, $description); 

while($stmt->fetch()){ 
    $group = new Group(); 
    $group->Id = $id; 
    $group->Name = $name; 
    $group->Description = $description; 

    $groups[] = $group; 
} 
return $groups; 
+0

가이 (Gah)는 더 긴 쿼리와 큰 오브젝트의 일부를 진짜 고통으로 만듭니다. 다행히 나 자신보다 앞서 나가지 못했습니다. 감사! – Snowburnt

0

하나 재미있는 트릭 나는이 다른 방식으로 같은 일을 할 때 단순화 할 수 있습니다 내 저장소 클래스에

나는 ID를 기반으로 단일 항목을 반환하는 기능이 그때 다른 클래스가 그 다양한 항목 그룹을 반환합니다. 그래서 처리가이 같은 :

$collection = array(); 

$stmt=$connect->prepare("SELECT Id FROM SOME_TABLE WHERE CRITERIA=?"); 
$stmt->bind_param("s", $Whatever); 
$stmt->execute(); 
$stmt->bind_result($id); 

while($stmt->fetch()){ 
    $collection[] = $this->getItem($id); 
    } 

이 단일 선택과 다중 선택을해야 할 때 유용하며, 매우 유용합니다 (의 getItem 전달 된 ID를 기반으로 개체를 빌드를 반환) 클래스에 많은 속성/속성이있는 경우 (준비된 명령문, 바인딩 된 매개 변수, 바인딩 된 결과 및 특성 할당을 한 번만 입력하면됩니다).

또는 배열을 채우고 데이터베이스 연결을 닫은 다음 배열에서 foreach를 수행하여 연결을 저장할 수 있습니다.

관련 문제