Dwa NAJWIĘKSZE problemy z Twoim kodem i Twoim "rozwiązaniem":
- Masz
@
operator w całym miejscu. Na które masz -1 głos na swoje pytanie.@
operator jest samo zło. Dział IT jest odpowiedzialny za pustą stronę, którą widzisz. - Jednak wybrany środek zaradczy pogorszył sytuację. Ta rzecz „LUB umrzeć” nie jest magiczną pieśnią mającą na celu rozwiązanie jakiegokolwiek problemu z raportowaniem błędów. Niewłaściwe użycie spowoduje błędy jak ten, który masz. Dla których masz
1
w komunikacie o błędzie.
Po pierwsze, twoje włączenie jest w porządku, więc zostaw to w spokoju.
Aby uzyskać błąd z mysqli, postępuj zgodnie z tymi instrukcjami:
Zamiast losowo dodawać „lub zgiń”, potrzebujesz bardziej niezawodnego i pomocnego rozwiązania do raportowania błędów.
Jeśli używasz mysqli_query() w całym kodzie aplikacji bez enkapsulacji go do jakiejś klasy pomocniczej, trigger_error()
jest dobrym sposobem na zgłoszenie błędu PHP, ponieważ wskaże Ci również plik i numer wiersza, w którym wystąpił błąd
$res = mysqli_query($mysqli,$query) or trigger_error(mysqli_error($mysqli)."[$query]");
we wszystkich twoich skryptach
i od tego czasu zostaniesz powiadomiony o przyczynie, dla której obiekt nie został utworzony.(Jeśli jesteś ciekawy tego or
składnia, Wyjaśniłem to tutaj
- wyjaśnia również, dlaczego masz (1)
w komunikacie o błędzie)
Jednak , jeśli enkapsulujesz zapytanie w jakiejś klasie, plik i wiersz z błędu wyzwalacza będą zupełnie bezużyteczne, ponieważ będą wskazywać na samo wywołanie, a nie kod aplikacji, który spowodował pewien problem. Tak więc, uruchamiając enkapsulowane polecenia mysqli, należy użyć innego sposobu:
$result = $mysqli->query($sql);
if (!$result) {
throw new Exception($mysqli->error." [$query]");
}
ponieważ Wyjątek zapewni Ci śledzenie stosu , który zaprowadzi Cię do miejsca, z którego wywołano błędne zapytanie.
Zauważ, że musisz ogólnie widzieć błędy PHP. Na działającej stronie musisz zaglądać do dzienników błędów, więc ustawienia muszą być
error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);
podczas gdy na lokalnym serwerze programistycznym można popełniać błędy na ekranie:
error_reporting(E_ALL);
ini_set('display_errors',1);
i oczywiście nigdy nie powinieneś używać operatora pomijania błędów (@) przed swoimi stwierdzeniami.