Попытка получить свойство не-объекта MySQLi result

Получил немного кода PHP, с которым я борюсь – имел поиск в Google и т. Д., И попробовал все упомянутое, но по какой-то причине у меня возникли проблемы с его решением.

Проблема в:

У меня есть код, который запрашивает базу данных для присутствия конкретного пользователя.

Код (это метод внутри класса)

<?php global $mysqli; // Query specified database for value $q = 'SELECT id FROM ' . $database . ' WHERE username = \'' . $username . '\''; $r = $mysqli->query($q); var_dump($r); if ($r->num_rows) { // If row found username exists so return false return false; } ... ?> 

Я var сбрасывал результат запроса ($ r) и получил это:

 object(mysqli_result)#4 (5) { ["current_field"]=> int(0) ["field_count"]=> int(1) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) } 

Это правильно, должно быть только 1 строка, как указано выше.

Я получаю эту ошибку, if ($r->num_rows) { на строку: if ($r->num_rows) {

Примечание. Пытается получить свойство не-объекта в ФАЙЛЕ на линии LINE

но я не знаю, почему, поскольку объект действителен (как указано выше), и он должен работать нормально. Из того, что я могу сказать, похоже, все идет хорошо, мне просто интересно, почему произошла ошибка. Я уверен, что это что-то простое, но я буду признателен за любую помощь.

 $sql = "SELECT * FROM table"; $result = $conn->query($sql); if (!$result) { trigger_error('Invalid query: ' . $conn->error); } 

проверьте ошибку с помощью функции mysqli_error ()

вероятно, ваш запрос имеет некоторые недостатки.

Просто подумал, что я немного расширюсь.

Если вы выполняете запрос MYSQLI SELECT, который возвращает 0 результатов, он возвращает FALSE.

Однако, если вы получите эту ошибку, и вы написали свою собственную функцию запроса MYSQLI, вы также можете получить эту ошибку, если выполняемый запрос не является выбранным, а обновляется. Запрос обновления вернет либо TRUE, либо FALSE. Поэтому, если вы просто предположите, что любой неверный результат будет иметь возвращенные записи, тогда вы будете отключены при запуске обновления или что-либо другое, кроме выбора.

Самое простое решение, после того как вы проверили, что это не false, нужно сначала проверить, что результат запроса является объектом.

  $sqlResult = $connection->query($sql); if (!$sqlResult) { ... } else if (is_object($sqlResult)) { $sqlRowCount = $sqlResult->num_rows; } else { $sqlRowCount = 0; } 

Я работал над написанием настраиваемого модуля в Drupal 7 и получил ту же ошибку:

Примечание. Попытка получить свойство не объекта

Мой код выглядит примерно так:

 function example_node_access($node, $op, $account) { if ($node->type == 'page' && $op == 'update') { drupal_set_message('This poll has been published, you may not make changes to it.','error'); return NODE_ACCESS_DENY; } } 

Решение: Я просто добавил условие if (is_object($sqlResult)) , и все прошло хорошо.

Вот мой последний код:

 function mediaten_node_access($node, $op, $account) { if (is_object($node)){ if ($node->type == 'page' && $op == 'update') { drupal_set_message('This poll has been published, you may not make changes.','error'); return NODE_ACCESS_DENY; } } } 

Я думаю, это не причина, о которой все говорили выше. В вашем коде что-то не так, может быть, пропустить орфографию или несоответствие именам столбцов базы данных. Если запрос mysqli не получает результата, он возвращает false, так что он не является объектом – это неправильная идея. Все работает нормально. он возвращает 1 или 0, если запрос имеет результат или нет.

Итак, мое предложение – проверить имена переменных и имена столбцов таблицы или любые другие орфографические ошибки.

Причина вашей проблемы проста. Так много людей столкнутся с одной и той же проблемой, потому что я тоже это сделал, и мне потребовался час, чтобы понять. На всякий случай, кто-то еще спотыкается. Проблема в вашем запросе, оператор select вызывает $dbname вместо имени таблицы. Поэтому его не найдено, в результате чего возвращается false которое является boolean . Удачи.