Za każdym razem, gdy dostaniesz ...
„Ostrzeżenie: mysqli_fetch_object () oczekuje, że parametr 1 będzie mysqli_result, podano wartość logiczną”
... jest prawdopodobne, ponieważ występuje problem z zapytaniem. prepare()
Lub query()
zwrot potęga FALSE
(Boolean), ale ta wiadomość awaria generic nie opuszczę cię dużo w drodze wskazówek. Jak dowiedzieć się, co jest nie tak z zapytaniem? Państwo zapytać !
Przede wszystkim upewnij się, że raportowanie błędów jest włączone i widoczne: dodaj te dwa wiersze u góry pliku (plików) zaraz po <?php
tagu otwierającym :
error_reporting(E_ALL);
ini_set('display_errors', 1);
Jeśli raportowanie błędów zostało ustawione w php.ini, nie musisz się o to martwić. Po prostu upewnij się, że radzisz sobie z błędami z gracją i nigdy nie ujawnisz prawdziwej przyczyny problemów użytkownikom. Ujawnienie prawdziwej przyczyny opinii publicznej może być wygrawerowanym złotem zaproszeniem dla tych, którzy chcą wyrządzić szkody na twoich stronach i serwerach. Jeśli nie chcesz wysyłać błędów do przeglądarki, zawsze możesz monitorować dzienniki błędów serwera WWW. Lokalizacje dzienników będą się różnić w zależności od serwera, np. W systemie Ubuntu dziennik błędów zwykle znajduje się pod adresem /var/log/apache2/error.log
. Jeśli sprawdzasz dzienniki błędów w środowisku Linux, możesz użyć tail -f /path/to/log
okna konsoli, aby zobaczyć błędy, które pojawiają się w czasie rzeczywistym ... lub podczas ich tworzenia.
Po wyeliminowaniu standardowych raportów o błędach dodanie sprawdzania błędów połączenia z bazą danych i zapytań zapewni znacznie więcej szczegółów na temat występujących problemów. Spójrz na ten przykład, w którym nazwa kolumny jest niepoprawna. Po pierwsze, kod zwracający ogólny komunikat o błędzie krytycznym:
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
Błąd jest ogólny i nie jest zbyt pomocny w rozwiązywaniu problemów.
Za pomocą kilku kolejnych wierszy kodu możesz uzyskać bardzo szczegółowe informacje, których możesz użyć do natychmiastowego rozwiązania problemu . Sprawdź prepare()
prawdziwość oświadczenia i jeśli jest ono dobre, możesz przystąpić do wiązania i wykonywania.
$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
}
Jeśli coś jest nie tak, możesz wyrzucić komunikat o błędzie, który prowadzi bezpośrednio do problemu. W tym przypadku nie ma foo
kolumny w tabeli, rozwiązanie problemu jest banalne.
Jeśli wybierzesz, możesz włączyć to sprawdzanie do funkcji lub klasy i rozszerzyć je, obsługując błędy z wdziękiem, jak wspomniano wcześniej.