/ / Jak uzyskać informacje o błędach MySQLi w różnych środowiskach - php, mysqli, ready-statement, środowisko, raportowanie błędów

Jak uzyskać informacje o błędach MySQLi w różnych środowiskach - php, mysqli, ready-statement, środowisko, raportowanie błędów

W moim środowisku lokalnym / programistycznym kwerenda MySQLi wykonuje OK. Jednak po przesłaniu go do mojego środowiska hostingowego pojawia się następujący błąd:

Błąd krytyczny: wywołanie funkcji składowej bind_param () na obiekcie nie-obiektowym w ...

Oto kod:

global $mysqli;
$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");
$stmt->bind_param("i", $cur_id);
$stmt->execute();
$stmt->bind_result($uid, $desc);

Aby sprawdzić moje zapytanie, próbowałem wykonać zapytanie za pomocą panelu sterowania phpMyAdmin, a wynik jest OK.

Odpowiedzi:

63 dla odpowiedzi № 1

Przede wszystkim zawsze miej ten wiersz przed połączeniem MySQLi wszystko twoje środowiska:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Następnie wszystkie błędy MySQL zostaną przesłanedo wyjątków PHP. Nieprzestrzeganie wyjątku z kolei powoduje błąd krytyczny PHP. Tak więc, w przypadku błędu MySQL, otrzymasz zwykły błąd PHP, który natychmiast powiadomi Cię o przyczynie błędu, a ślad stosu doprowadzi Cię do miejsca, w którym wystąpił błąd.

Pamiętaj, że musisz być w stanie zobaczyć Ogólnie błędy PHP. I tu rzeczywiście chodzi o różne środowiska:

  • W witrynie na żywo musisz przejrzeć dzienniki błędów, więc ustawienia muszą być

    error_reporting(E_ALL);
    ini_set("display_errors", 0);
    ini_set("log_errors", 1);
    
  • Podczas pracy na lokalnym serwerze programistycznym można popełnić błędy na ekranie:

    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    

I mała lista tego, co ty nie powinieneś:

  • Użyj operatora tłumienia błędów (@)
  • Posługiwać się die() lub echo lub jakąkolwiek inną funkcję drukowania bezwarunkowego komunikatu o błędzie na ekranie. PHP może już to wszystko poprawić, pomoc nie jest wymagana.
  • Testowanie wyniku zapytania ręcznie (np if($result)) po prostu nie ma sensu. Zapytanie nie powiodło się, a otrzymasz wyjątek błędu lub wszystko było w porządku i nie ma nic do przetestowania.
  • Użyj polecenia try..catch, aby wyświetlić komunikat o błędzie. Znowu PHP może to zrobić lepiej, o wiele lepiej.