Каждый раз, когда вы получаете ...
«Предупреждение: mysqli_fetch_object () ожидает, что параметр 1 будет mysqli_result, учитывая логическое значение»
... вероятно, потому что есть проблема с вашим запросом. prepare()
Или query()
может вернуться FALSE
(булево), но это общее сообщение об ошибке не оставит вас много на пути разгадки. Как вы узнаете, что не так с вашим запросом? Вы спрашиваете !
Прежде всего, убедитесь, что отчеты об ошибках включены и видимы: добавьте эти две строки вверху ваших файлов сразу после открывающего <?php
тега:
error_reporting(E_ALL);
ini_set('display_errors', 1);
Если ваше сообщение об ошибке установлено в php.ini, вам не придется беспокоиться об этом. Просто убедитесь, что вы корректно обрабатываете ошибки и никогда не раскрываете истинную причину каких-либо проблем для ваших пользователей. Раскрытие истинной причины для общественности может быть приглашением с золотой гравировкой для тех, кто хочет навредить вашим сайтам и серверам. Если вы не хотите отправлять ошибки в браузер, вы всегда можете отслеживать журналы ошибок вашего веб-сервера. Расположение журналов зависит от сервера, например, в Ubuntu журнал ошибок обычно находится по адресу /var/log/apache2/error.log
. Если вы просматриваете журналы ошибок в среде Linux, вы можете использовать их tail -f /path/to/log
в окне консоли, чтобы увидеть ошибки, возникающие в режиме реального времени .... или по мере их возникновения.
Как только вы возьметесь за стандартную отчетность об ошибках, добавив проверку ошибок в вашем соединении с базой данных и запросах, вы получите гораздо более подробную информацию о возникающих проблемах. Посмотрите на этот пример, где имя столбца неверно. Во-первых, код, который возвращает общее фатальное сообщение об ошибке:
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
Ошибка носит общий характер и не очень помогает вам решить, что происходит.
С помощью пары строк кода вы можете получить очень подробную информацию, которую можно использовать для немедленного решения проблемы . Проверьте prepare()
утверждение на правдивость, и если оно хорошее, вы можете перейти к обязательному исполнению и исполнению.
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
// any additional code you need would go here.
} else {
$error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
// handle error
}
Если что-то не так, вы можете выложить сообщение об ошибке, которое приведет вас непосредственно к проблеме. В этом случае foo
столбца в таблице нет, решение задачи тривиально.
При желании вы можете включить эту проверку в функцию или класс и расширить ее, корректно обработав ошибки, как упоминалось ранее.