Почему повторение $ result-> fetch_object () -> id дважды выдает ошибку: «Попытка получить свойство необъекта?» - PullRequest
0 голосов
/ 06 июля 2011

Второе эхо ниже выдает ошибку «Попытка получить свойство необъекта?» Первое эхо печатается нормально.

$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 ]

3 голосов
/ 06 июля 2011

Когда вы используете fetch_object(), указатель перемещается на следующую строку, поэтому при втором вызове вы получите результат следующей строки или NULL, если строк больше нет.

Взгляните на руководство ; код, подобный этому, приведет к бесконечному циклу, если указатель не переместится на следующую строку:

/* fetch object array */
while ($obj = $result->fetch_object()) {
    printf ("%s (%s)\n", $obj->Name, $obj->CountryCode);
}
2 голосов
/ 06 июля 2011

Сделайте ссылку на него:

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

echo "companyId: " . $id;
echo "\ncompanyId: " . $id;
1 голос
/ 06 июля 2011

mysqli-resultsets работает с курсорами.Это означает, что если вы вызываете fetch_object(), объект извлекается (конечно), курсор перемещается, и теперь ранее извлеченный объект больше не присутствует в наборе результатов.Получить объект в переменную и взаимодействовать с ним, вместо того, чтобы вызывать fetch_object() несколько раз.

$o = $result->fetch_object();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...