2015-01-19 3 views
4

Я пытаюсь увидеть структуру объекта PDOStatement возвращенного мой запрос:var_dump из PDOStatement объекта не показывает возвращаемые данные

$sql="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;"; 
$result=$conn->query($sql); 

Запрос работает, так как я в состоянии гнезда некоторые foreach заявления и отобразить шесть строк данных, выполнив следующее.

$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);'. Я не использую явные 'fetch'es в коде, даже для отображения 6 строк. –

+1

Согласно документам (http://php.net/PDOStatement), единственное право на объект «PDOStatement» - это 'queryString', как вы можете видеть. Он также «реализует Traversable», вот что позволяет вам «переубедить» его. Когда вы это делаете, 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

Добро пожаловать :-) –

Смежные вопросы