Кожен раз, коли ви отримаєте ...
"Попередження: 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
в таблиці немає стовпця, розв’язання задачі тривіальне.
Якщо ви вирішите, ви можете включити цю перевірку у функцію чи клас та розширити її, обробляючи помилки витончено, як згадувалося раніше.