Вот некоторый код, который я использовал для воспроизведения случая, когда num_rows
кажется NULL:
<?php
error_reporting(E_ALL);
$conn = new mysqli('127.0.0.1', 'root', null, 'test');
$sql = "SELECT * FROM dual";
$result = $conn->query($sql);
if ($result === false) {
print "Error: {$conn->error}\n";
}
$n = $result->num_rows;
echo "Dump the num_rows property: ";
var_dump($n);
Вывод:
Error: No tables used
Notice: Trying to get property of non-object in /Users/bkarwin/Documents/SO/my.php on line 14
Dump the num_rows property: NULL
Уведомление о том, что доступ к нему недействителенобъектно-ориентированное свойство переменной, которая не является объектом.Это частый источник путаницы для разработчиков PHP, и это является побочным продуктом того факта, что PHP является свободно типизированным языком, и такие функции, как query()
, могут возвращать либо объект результата, либо логический скаляр.
Функция query()
фактически вернула false как $result
из-за некоторой ошибки.В своем коде я проверил эту ошибку, а вы нет.
Когда вы запускаете mysqli::query()
или mysqli::prepare()
или mysqli_stmt::execute()
, вы должны каждый раз проверять наличие ошибок .
Что-то в вашем запросе вызвало ошибку.Вы должны проверить на наличие ошибки и сообщить о ней.
Обновление: я отредактировал некоторый текст выше, чтобы улучшить объяснение, но некоторые комментарии ниже могут показаться неуместными.