Я пытаюсь увидеть структуру объекта 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
показать массивы, связанные со строками и полями?
Страница руководства для PDOStatement
показывает, что здесь происходит. PDOStatement
объекты имеют только один имущество, queryString
, Это то, что вы видите, когда вы var_dump.
Все остальное на PDOStatement
это метод, который исключен из var_dump
,
PDOStatement implements Traversable
(Документы для Traversable
.) Вот как вы можете видеть строки, когда вы foreach
, Внутренне PDOStatement
реализует методы, которые вызываются, когда вы foreach
над объектом. Эти методы вызывают fetch()
и получить данные строки. Вот как вы видите строки, когда вы foreach
, но почему вы не можете увидеть их в var_dump
,
Других решений пока нет …