Twee GROOTSTE problemen met uw code en uw "oplossing":
- 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. - 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.