我正在尝试查看查询返回的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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句