2015-01-19 3 views
4

표시되지 않습니다 다음을 수행하여 6 개의 행을 표시하십시오.위해서 var_dump 내가 내 쿼리에 의해 반환 된 PDOStatement 객체의 구조를 볼려고 반환 된 데이터

$firstRow=true; 
echo '<table>'; 
foreach ($result as $rowId => $rowData) { 
    if ($firstRow) { 
     echo "<thead><tr><th>Row Number</th>"; 
     foreach ($rowData as $fieldId => $fieldData) { 
      echo "<th>$fieldId</th>"; 
     } 
     echo "</tr></thead>"; 
     $firstRow=false; 
    } 
    echo "<tr><td>$rowId</td>"; 
    foreach ($rowData as $fieldId => $fieldData) { 
     $fieldData=str_replace("\n","<br>",$fieldData); 
     echo "<td>$fieldData</td>"; 
    } 
    echo "</tr>"; 
} 
echo "</table>"; 

하지만 객체 $result의 내부 구조에 대한 호기심, 그래서 var_dump이 '을 에드이있어 :

object(PDOStatement)#4 (1) { 
    ["queryString"]=> 
     string(185) "SELECT co.CompanyId, co.Name, co.Address, co.City, co.State, ctry.NameEnglish, co.PostalCode FROM company AS co LEFT JOIN country AS ctry ON ctry.CountryId = co.CountryId ORDER BY Name;" 
} 

행과 관련된 배열을 표시하지 var_dump 않는 이유와 전지?

+0

당신은 다음과 같이했다 :'$ result = $ result-> fetchAll();'? 그리고 나서'var_dump ($ result); ' – Rizier123

+0

아니요. 첫 번째 코드 세그먼트에서 두 줄을 수행 한 다음'var_dump ($ result);'를 수행했습니다. 필자는 6 행을 표시하기 위해 코드에서 명시 적으로 '가져 오기'를 사용하지 않습니다. –

+1

docs (http://php.net/PDOStatement)에 따르면 'PDOStatement' 객체의 유일한 속성은'queryString'입니다. 그것은 또한'Traversable'을 구현합니다. 그래서 그것이 당신을 "foreach"하게합니다. 그렇게하면 PHP는 객체에 대한 메소드를 호출합니다. 이러한 메소드는 행 데이터를 가져옵니다. 행은 객체의 속성이 아니므로 'var_dump'에 나타나지 않습니다. –

답변

4

PDOStatement에 대한 메뉴얼 페이지는 여기서 무슨 일이 일어나고 있는지 보여줍니다. PDOStatement 개체는 속성이 하나만 있습니다., queryString. 그것이 당신이보고있는 것입니다. var_dump.PDOStatement에있는 그 밖의 모든 것은 var_dump에서 제외되는 방법입니다.

PDOStatement implements Traversable (문서는 Traversable입니다.) foreach 일 때 행을 볼 수있는 방법입니다. 내부적으로 PDOStatement은 객체 위에 foreach을 호출 할 때 호출되는 메소드를 구현합니다. 이러한 메서드는 fetch()을 호출하고 행 데이터를 가져옵니다. 따라서 foreach 행을 볼 수 있지만 그 이유는 var_dump입니다.

+0

좋은 답변입니다. 감사. –

+0

당신을 환영합니다 :-) –

관련 문제