我最近发现我可以在不使用mysqli_fetch_object
功能的情况下打印数据库中的结果。
所以例如: 让我们说我们有简单的sql select statment,可以通过这样的方式执行:
$conn = mysqli_connect('localhost', 'root', '', 'example_db');
$result = mysqli_query($conn, "SELECT * FROM users");
下一步将是这样的:
while($row = mysqli_fetch_object($result)) echo $row->username
其中,用户名是用户表中对应的列名。
然后我发现这也适用于将其打印出来:
foreach($result as $row) echo $row['username'];
经过几次var_dumps
和更少的PHP文档阅读。我唯一的猜测是因为这是可能的:
5.4.0添加了迭代器支持,因为mysqli_result现在实现了Traversable。
所以,如果我的说法属实。是否需要使用类似的东西
mysqli_fetch_object
或类似函数mysqli_fetch_array
?
答案 0 :(得分:1)
基本上有3种方法可以通过MySQLi API在PHP中获得结果。
按照优先顺序:
将所有记录提取到PHP数组中。您可以使用fetch_all()
方法将所有记录放入多维数组。您可以决定是否应将记录作为关联数组,数字数组或两者都读取。您无法获取对象数组。例如
$results = $conn->query("SELECT * FROM users")->fetch_all(MYSQLI_ASSOC);
您还可以直接迭代mysqli_result
对象。这将为您提供关联数组的结果,并且您可以根据需要进行多次迭代。
$result = $conn->query("SELECT * FROM test1");
foreach ($result as $r) {
var_dump($r['id']);
}
echo '------------------------------------------------------------';
foreach ($result as $r) {
var_dump($r['id']);
}
如果其他两个选项不够灵活,或者您希望将结果作为对象,则需要依靠其他方法,例如fetch_object()
或fetch_array()
$result = $conn->query("SELECT * FROM test1");
$objects = []; // collect objects into an array
while ($obj = $result->fetch_object()) {
$objects[] = $obj;
}
这里的问题是,您需要分别获取每一行,并且一旦到达末尾就无法再次进行迭代,除非倒回对象的内部指针。如果您需要在收集结果时应用一些转换,则此方法有时会很有用。
当然,我也建议您改用PDO,因为PDO功能更强大,故障少且易于使用。