2014-03-24 3 views
0

저는 PDO를 사용하는 데 아주 기본적인 문제가 있습니다. 도움이 필요합니다 - 어딘가에 문법 오류가있을 수 있지만 그 인생을 생각지 못할 수 있습니다. PDO 매우 많이 사용되는 연관 배열을를 havent 때문에 코드의이 부분에 초점) 나는 다음과 같은 코드를 사용하여 특정 이메일 주소로 사용자와 연관된 내 데이터베이스에서 모든 데이터를 선택하고PDO :: FETCH_ASSOC에서 연관 배열 값을 참조하는 경우

!

$id = '[email protected]'; 


$stmt = $db->prepare('SELECT * FROM first_page WHERE email=?'); 
$stmt->bindValue(1, $id, PDO::PARAM_STR); 
$stmt->execute(); 
$resulty = $stmt->fetchAll(PDO::FETCH_ASSOC); 

print_r($resulty); 
echo $resulty['title']; 

print_r은 연관 배열을 전체적으로 표시하지만 echo은 저장된 값을 표시하지 않습니다. 'title'열에 대해 거기에 데이터베이스에서 '제목'라는 열, 그래서 그것을 잘못 참조하고 메신저. 그러나 그것은 내가 앞에서 책에서 가지고있는 예와 거의 동일 해 보이기 때문에 나는 어디에서부터 시작해야할지 모른다.

print_r의 출력은 다음이 데이터의 가치가 하나 개 이상의 행을 반환 지원하므로

Array ([0] => Array ([user_id] => 93 [time_stamp] => 2014-03-04 22:00:16 [title] => Mr [first_name] => Pete [surname] => John [phone] => 2147483647 [email] => [email protected])) 
+0

print_r ($ resulty); 또는 적어도 관련 덩어리. – larsAnders

+0

가 질문에 추가되었습니다 !! – Giovanni

+0

'echo $ resulty [0] [ '제목']; ' –

답변

3

$stmt->fetchAll()는 연관 배열의 배열을 반환한다.

결과 세트에 행이 하나라도, fetchAll()은 여전히 ​​하나의 요소에 대한 배열을 리턴합니다. 이는 하나의 행에 대한 연관 배열입니다.

그래서 당신이 필요합니다 위해

echo $resulty[0]['title']; 
+0

질문에 편집을 추가 한 후에 배열의 배열과 관련이 있다고 생각합니다! fetchAll을 사용하는 것에 대한 대안이 있습니까? 그래서 제가 한 것처럼 그것을 참조 할 수 있습니까? – Giovanni

+0

물론, while ($ resulty = $ stmt-> fetch (PDO :: FETCH_ASSOC))를 사용하면 한 번에 한 행을 얻을 수 있습니다. –

+0

나는 단지 한 행을 가져올 것입니다 (전자 메일 주소는 고유합니다). 그래서 나는 위의 코드를 사용하지만 'while'을 삭제하겠습니까? (즉, fetchAll을 fetch로 대체 하시겠습니까?) – Giovanni

1

이를 확장하는 - 즉, 당신이 하나의 결과 이상이있는 경우, 당신은 배열 $ resulty와 foreach 루프를 사용할 수 있습니다. 이렇게하면 $ resulty [0], $ resulty [1] 등을 사용할 필요가 없습니다.

foreach ($resulty as $result){ 
    echo $result['title']; 
} 
+0

나는 하나 이상의 결과를 가져서는 안됩니다 (고유 한 이메일 주소를 가진 한 명의 사용자를 나타내는 데이터이며이 사용자의 데이터를 검색하여 양식을 미리 채울 수 있습니다). fetchAll 대신 foreach 루프를 사용할 필요가 없습니까? – Giovanni

+0

그냥 가져 오기를 사용할 수 있습니다. 한 번에 한 행을 반환합니다. 검색어 끝 부분에 LIMIT 1을 추가 할 수도 있습니다. 하지만 결과 배열은 같은 구조를 가질 것이라고 믿습니다. 아마 [0] 표기법을 사용해야 할 것입니다. – larsAnders