2012-10-18 2 views
2

MySQLi를 사용하는 데 문제가 있습니다. 데이터베이스의 모든 사용자를 배열로 반환하는 함수를 만들고 싶습니다. 여기에 코드MySQLi : 테이블에서 모두 가져 오기, 결과에 의해 참조가 전달됨

는 :

public function getAll() { 
    $statement = $this->database->prepare('SELECT `id`, `email`, `firstname`, `lastname`, `last_time`, `type`, `activated`, `enabled` FROM `users` ORDER BY `id`'); 
    $statement->execute(); 
    $statement->bind_result($result['id'], $result['email'], $result['firstname'], $result['lastname'], $result['last_time'], $result['type'], $result['activated'], $result['enabled']); 

    $users = array(); 

    while($statement->fetch()) { 
     $users[$result['id']] = $result; 
    } 

    return $users; 
} 

문제 $users 어레이의가 가득 얻을 이렇게하면, &$result가 참조 &을 가지고 있다는 것입니다. while 루프가 실행될 때마다 이전에 삽입 된 레코드는 &$result 변수의 마지막 값으로 업데이트됩니다. 따라서 전체 결과 $users에는 각 레코드에 대해 동일한 모든 데이터 목록이 있습니다.

&$result 변수에서 참조를 제거하려면 어떻게해야합니까? 더 간단한 해결책이 있어야한다,

while($statement->fetch()) { 
    $users[$result['id']] = array($result['id'], $result['email'], ..etc); 
} 

을하지만 너무 많은 것 같아요입니다 :

그것은 새로운 배열에 자신의 각 열을 넣어 작동합니다.

답변

1

이처럼 설정 해제 시도 :

$users[$result['id']] = unserialize(serialize($result)); 
+0

내가 찾던 있다고! 감사! –

+1

답변에 문제가 하나 있습니다. serialiSe가 아닌 serialiSe –

+0

@Stijntjhe 그것을 보아 주셔서 감사합니다 : D – Udan

관련 문제