【发布时间】:2017-03-28 19:25:47
【问题描述】:
我这里有这段代码:
$conn = new mysqli("localhost", "root", "pass", "branchdatabase");
$result = $conn->query("SELECT item.item_name, stock.stock_amount FROM item INNER JOIN stock ON item.item_id=stock.fk_item_id");
var_dump($result);
foreach($result as $r)
{
echo $r["item_name"];
}
这应该起作用,但是echo $r["item_name"]; 处的行不应该起作用,但它确实起作用,因为当我使用 var_dump 输出 $result 它返回一个 mysqli 对象,那么我如何在 foreach 循环中索引它并输出数据?当 $result 作为对象而不是数组返回时,我只是对 echo $r["item_name"]; 的工作方式感到困惑?
更新:
在 $result 上执行 var_dump 后,我得到了这个:
object(mysqli_result)[28]
public 'current_field' => int 0
public 'field_count' => int 2
public 'lengths' => null
public 'num_rows' => int 5
public 'type' => int 0
对我来说,返回的对象是什么,那么当 $result 是对象时,为什么我可以使用 foreach 循环仍然像数组一样循环遍历数据?
【问题讨论】:
-
试试 $r->item_name;
-
不,代码有效,但我试图了解原因。因为$result是一个对象,而不是数组,那为什么当$result作为mysqli对象返回时,它允许我使用foreach循环来输出数据。
-
mysqli_query 返回一个支持
Iterator并实现Traversable 的mysqli_result (represents the result set obtained from a query against the database)。即可以直接在foreach循环中使用。