为什么回显$ result-> fetch_object() - > id两次抛出错误:"试图获取非对象的属性?"

时间:2011-07-05 21:03:44

标签: php mysqli

下面的第二个回显引发错误“试图获取非对象的属性?”第一个echo打印得很好。

$sql = "SELECT id
        FROM files
        WHERE url = '$url'";

$result = $this->mysqli->query($sql);

echo "companyId: " . $result->fetch_object()->id;
echo "\ncompanyId: " . $result->fetch_object()->id;

为了简化演示此错误,我将回声加倍。我实际上是在尝试检查是否设置了$ result-> fetch_object() - > id,如果是,则执行该操作。我无法正常工作,因为第二次使用它时,它会抛出错误“试图获取非对象的属性。”

if(isset($result->fetch_object()->id))
    echo $result->fetch_object()->id;

3 个答案:

答案 0 :(得分:3)

使用fetch_object()时,指针移动到下一行,所以第二次调用它时会得到下一行的结果,如果没有其他行,则得NULL

看看manual;如果指针不会移动到下一行,这样的代码将导致无限循环:

/* fetch object array */
while ($obj = $result->fetch_object()) {
    printf ("%s (%s)\n", $obj->Name, $obj->CountryCode);
}

答案 1 :(得分:2)

引用它:

$result = $this->mysqli->query($sql);
$id = $result->fetch_object()->id;

echo "companyId: " . $id;
echo "\ncompanyId: " . $id;

答案 2 :(得分:1)

mysqli-resultsets与游标一起使用。这意味着,如果您调用fetch_object()对象被获取(当然),则光标移动,现在先前检索的对象不再出现在结果集中。将对象检索到变量并与之交互,而不是多次调用fetch_object()

$o = $result->fetch_object();