Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd krytyczny mysqli_connect:require()

Dwa NAJWIĘKSZE problemy z Twoim kodem i Twoim "rozwiązaniem":

  1. 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.
  2. 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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Odmowa polecenia aktualizacji dla użytkownika

  2. Wyniki grup MySQL według dnia przy użyciu znacznika czasu

  3. Jak skopiować dane z innej tabeli bez blokowania tabeli w MYSQL 6.2?

  4. Jak porównać dwie kolumny w SQL?

  5. Sequelize:Lub-warunek na wielu stołach