Mijn goed werkende code draaiend onder PHP 5.6 geeft altijd juist GEEN foutboodschap vanwege het teken '@', maar onder PHP 7 wordt er TOCH ALTIJD een foutboodschap weergegeven mét de onmiddellijke programma-afbreking, zodat er niet verder gegaan kan worden!
Mijn code ziet er als volgt uit:
$dbs = @mysqli_connect($dbshst, $dbsusr, $dbspsw);
if($dbs === false){---mijn eigen foutboodschaproutine---}
HOE kan ik elke mysqli foutboodschappen ONDERDRUKKEN onder PHP 7 én zonder onmiddellijke programma-afbreking?
a) Waarom zou je dat willen? Lijkt me handiger om je code zo te schrijven dat er geen foutmeldingen voorkomen.
b) Tijdens ontwikkeling wil je zeker alle foutmeldingen zien. Als alles goed werkt en online staat kan ik me nog voorstellen dat je ALLE foutmeldingen wilt onderdrukken en niet alleen die van mysqli.
c) Alle foutmeldingen onderdrukken of juist tonen is gewoon een php.ini instelling:
Even van stackoverflow gekopieerd:
to Hide All Errors:
<?php
error_reporting(0);
ini_set('display_errors', 0);
?>
to Show All Errors:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
?>
[size=xsmall]Toevoeging op 18/09/2017 11:42:15:[/size]
Ik kreeg aldoor dezelfde boodschap:
Warning: mysqli_connect(): (HY000/1045): Access denied for user 'devrije'@'localhost' (using password: YES)
Ik heb met opzet een verkeerd wachtwoord gebruikt om te kijken, of het perfekt werkt. Blijkbaar niet!?
[size=xsmall]Toevoeging op 18/09/2017 22:33:15:[/size]
Jullie tip over verbergen van errors help HELAAS OOK NIET, want ik kreeg nog steeds dezelfde boodschap!?
Dan toon je de technische foutmeldingen als deze modus aan staat (tijdens ontwikkeling en het testen) en in productie (live) toon je: "Er is een technische fout bij ons opgetreden", terwijl je de foutmelding op de achtergrond logt. Eventueel kan je er een unieke MD5-hash aan koppelen, zodat je de foutmeldingen makkelijk terug kan vinden.
Dit zou bijvoorbeeld prima met behulp van een custom exception-handeler kunnen.
De insteek om op voorhand alle fouten onder het tapijt te schuiven lijkt mij inderdaad geen juiste. Foutmeldingen wijzen vaak in de richting van een (achterliggend) probleem. Deze "voelsprieten" onklaar maken is dan ook niet zo'n fantastische strategie.
Kijk anders eens in je errorlog. Mogelijk komen hier nog hele andere foutmeldingen voorbij. En inderdaad, voor ontwikkeling altijd het melden + weergeven van fouten aanzetten zodat je meteen op fouten wordt geattendeerd.
Het gebruik van @ is eigenlijk slechts in sommige gevallen geoorloofd (en volgens anderen is welke toepassing dan ook hiervan een soort van heiligschennis), namelijk als je wéét dat een bepaalde operatie kan mislukken. Het maken van een verbinding met een database-server zou hier niet onder moeten vallen... Uiteraard moet je dit op een of andere manier ondervangen, maar (in dit geval beter) niet met @.