sql >> Database >  >> RDS >> Mysql

mysqli_connect Fatale fout:required()

Twee GROOTSTE problemen met uw code en uw "oplossing":

  1. Je hebt @ exploitant overal. Waarvoor u -1 stem heeft op uw vraag. @ operator is het kwaad zelf. IT is verantwoordelijk voor de lege pagina die je ziet.
  2. De remedie die je kiest maakte de zaken echter erger. Dit "OF sterf"-ding is geen magisch gezang om een ​​foutrapportageprobleem op te lossen. En oneigenlijk gebruik veroorzaakt fouten zoals je hebt. Waarvoor je 1 . hebt in de foutmelding.

Allereerst is je opname in orde, dus laat het met rust.

Volg deze instructies om een ​​foutmelding van mysqli te krijgen:

In plaats van willekeurig "of sterven" toe te voegen, heeft u een robuustere en behulpzamere oplossing voor foutrapportage nodig.

Als je mysqli_query() overal in de applicatiecode gebruikt zonder het in te kapselen in een of andere helperklasse, trigger_error() is een goede manier om een ​​PHP-fout te melden, omdat het u ook het bestand en het regelnummer vertelt waar de fout is opgetreden

$res = mysqli_query($mysqli,$query) or trigger_error(mysqli_error($mysqli)."[$query]");

in al uw scripts
en sindsdien wordt u op de hoogte gesteld van de reden waarom het object niet is gemaakt. (Als u hier nieuwsgierig naar bent or syntaxis, Ik heb het hier uitgelegd - het legt ook uit waarom je (1) . hebt in de foutmelding)

Echter , als je je query in een klasse inkapselt, zullen bestand en regel van trigger-fout behoorlijk nutteloos zijn omdat ze naar de aanroep zelf zullen verwijzen, niet naar de applicatiecode die een bepaald probleem veroorzaakte. Dus, wanneer mysqli-commando's ingekapseld worden uitgevoerd, moet een andere manier worden gebruikt:

$result = $mysqli->query($sql);
if (!$result) {
    throw new Exception($mysqli->error." [$query]");
}

as Exception geeft je een stack trace , die u naar de plaats leidt van waaruit een foutieve zoekopdracht werd aangeroepen.

Merk op dat je PHP-fouten in het algemeen moet kunnen zien. Op een live site moet je in foutenlogboeken kijken, dus de instellingen moeten zijn

error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);

terwijl het op een lokale ontwikkelingsserver goed is om fouten op het scherm te maken:

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

en natuurlijk mag u nooit de operator voor het onderdrukken van fouten (@) vóór uw uitspraken gebruiken.




  1. vlagwaarde instellen base on record bestaat in een andere tabel

  2. Autorunning-query in mysql

  3. MongoDB lees-/schrijfvergrendelingen

  4. Hoe krijg ik toegang tot mysqli-verbinding in een andere klas op een andere pagina?