Snippet: PDO Exceptions
Hierbij de meest voorkomene exceptions $sqlexceptions = array( // let op dit zijn niet alle foutmeldingen, alleen de meest voorkomende '1146'=>'de bevraagde tabel bestaat niet', '1011'=>'het record kan niet verwijderd worden', '1015'=>'het record kan niet gelocked worden', '1020'=>'occurence op het scherm komt niet overeen met record in de database. Graag eerst verversen', '1022'=>'het record bestaat reeds in de database en kan daarom niet worden opgeslagen', '1027'=>'het record wordt al bewerkt op dit moment', '1029'=>'de bevraagde view bestaat niet', '1032'=>'het gevraagde record kan niet gevonden worden', '1036'=>'deze tabel kan niet bewerkt worden', '1037'=>'de server heeft onvoldoende geheugen beschikbaar', '1038'=>'de server heeft onvoldoende geheugen beschikbaar', '1040'=>'er zijn teveel connecties open', '1041'=>'de server heeft onvoldoende geheugen beschikbaar', '1044'=>'de gebruikte authenticatie gegevens zijn onjuist' , '1045'=>'de gebruikte authenticatie gegevens zijn onjuist' , '1046'=>'er is geen database geselecteerd' , '1048'=>'er wordt geprobeerd een lege waarde in een verplicht veld te schrijven', '1049'=>'de database is niet bekend', '1051'=>'de gevraagde tabel bestaat niet', '1052'=>'een kolom wordt twee keer gevraagd', '1053'=>'de server wordt afgesloten', '1054'=>'de gevraagde kolom bestaat niet', '1055'=>'er worden gegevens van een groep gevraagd, dit is niet duidelijk' , '1056'=>'er worden gegevens van een groep gevraagd, dit is niet duidelijk' , '1057'=>'er worden gegevens van een groep gevraagd, dit is niet duidelijk' , '1058'=>'het aantal toe te voegen gegevens klopt niet' , '1060'=>'een kolom wordt dubbel gevraagd' , '1062'=>'deze entry komt al voor in de database, u kunt u wachtwoord opnieuw opvragen', '1064'=>'er gaat iets fout met opslaan de beheerder is op de hoogte gesteld', '1065'=>'de vraag was leeg', '1074'=>'de gegevens passen niet in het veld', '1077'=>'de server wordt afgesloten', '1079'=>'de server wordt afgesloten', '1099'=>'het record wordt op dit moment bewerkt, probeer het later weer' , '1105'=>'onbekende fout' ); je kunt het als volgt gebruiken ==> zie voorbeeld doe er je voordeel mee en geef het aan als je het beter kunt, onzin vind handig vind Groeten Klaasjan
<?php
//hier de array
$sqlexceptions = array(
// let op dit zijn niet alle foutmeldingen, alleen de meest voorkomende
'1146'=>'de bevraagde tabel bestaat niet',
'1011'=>'het record kan niet verwijderd worden',
'1015'=>'het record kan niet gelocked worden',
'1020'=>'occurence op het scherm komt niet overeen met record in de database. Graag eerst verversen',
'1022'=>'het record bestaat reeds in de database en kan daarom niet worden opgeslagen',
'1027'=>'het record wordt al bewerkt op dit moment',
'1029'=>'de bevraagde view bestaat niet',
'1032'=>'het gevraagde record kan niet gevonden worden',
'1036'=>'deze tabel kan niet bewerkt worden',
'1037'=>'de server heeft onvoldoende geheugen beschikbaar',
'1038'=>'de server heeft onvoldoende geheugen beschikbaar',
'1040'=>'er zijn teveel connecties open',
'1041'=>'de server heeft onvoldoende geheugen beschikbaar',
'1044'=>'de gebruikte authenticatie gegevens zijn onjuist' ,
'1045'=>'de gebruikte authenticatie gegevens zijn onjuist' ,
'1046'=>'er is geen database geselecteerd' ,
'1048'=>'er wordt geprobeerd een lege waarde in een verplicht veld te schrijven',
'1049'=>'de database is niet bekend',
'1051'=>'de gevraagde tabel bestaat niet',
'1052'=>'een kolom wordt twee keer gevraagd',
'1053'=>'de server wordt afgesloten',
'1054'=>'de gevraagde kolom bestaat niet',
'1055'=>'er worden gegevens van een groep gevraagd, dit is niet duidelijk' ,
'1056'=>'er worden gegevens van een groep gevraagd, dit is niet duidelijk' ,
'1057'=>'er worden gegevens van een groep gevraagd, dit is niet duidelijk' ,
'1058'=>'het aantal toe te voegen gegevens klopt niet' ,
'1060'=>'een kolom wordt dubbel gevraagd' ,
'1062'=>'deze entry komt al voor in de database, u kunt u wachtwoord opnieuw opvragen',
'1064'=>'er gaat iets fout met opslaan de beheerder is op de hoogte gesteld',
'1065'=>'de vraag was leeg',
'1074'=>'de gegevens passen niet in het veld',
'1077'=>'de server wordt afgesloten',
'1079'=>'de server wordt afgesloten',
'1099'=>'het record wordt op dit moment bewerkt, probeer het later weer' ,
'1105'=>'onbekende fout'
);
// de functie
function catch_fouten($foutmelding){
global $sqlexceptions;
global $e;
// $fout is een tweede verbinding met een aprarte user
global $fout;
// de normale verbinding nodig voor het terugdraaien
global $db;
// uiteraard terugdraaien want er gaat iets fout
$db->rollBack();
//kijken of de fout voorkomt
if(array_key_exists($e->errorInfo[1],$sqlexceptions)){
// dan tonen we bijbehorende fout
$melding ='het volgende ging fout: '.$sqlexecptions[$e->errorInfo[1]].'<br>';
// en sturen een mailtje
swiftmail('[email protected]',$e->getmessage().'fout:<pre>'.$e->errorInfo[1].'</pre>','foutje bedankt');
// we loggen alle fouten in de db
if($fout){ // kijken of de db verbonden is
$sqlletje = "INSERT into fouten(gebruiker_id,eind_gebruikerid, fout, wanneer)
VALUES(:gebruiker,:eindgebruiker,:fout, NOW())";
$stmtje = $fout->prepare($sqlletje);
$stmtje ->bindValue(':gebruiker',$_SESSION['gebruikerid']);
$stmtje ->bindValue(':eindgebruiker',$_SESSION['eingebruikerid']);
$stmtje ->bindValue(':fout',$e->getmessage());
$stmtje ->execute();
}
else {
// loggen in bestand
}
}
else {
// we weten niet precies wat er fout gaat
$melding ='er ging iets fout de beheerder is op de hoogte gesteld'.$e->errorInfo[1];
swiftmail('[email protected]',$e->getmessage().'fout:<pre>'.$e->errorInfo[1].'</pre>','foutje bedankt');
// we loggen alle fouten in de db
if($fout){ // kijken of de db verbonden is
$sqlletje = "INSERT into fouten(gebruiker_id,eind_gebruikerid, fout, wanneer)
VALUES(:gebruiker,:eindgebruiker,:fout, NOW())";
$stmtje = $fout->prepare($sqlletje);
$stmtje ->bindValue(':gebruiker',$_SESSION['gebruikerid']);
$stmtje ->bindValue(':eindgebruiker',$_SESSION['eingebruikerid']);
$stmtje ->bindValue(':fout',$e->getmessage());
$stmtje ->execute();
}
else{
// we loggen in bestand
}
}
echo $melding;
}
// hieronder een try / catch waarin het gebruikt wordt.
try {
$sql-> uitvoeren();
}
catch(PDOException $e)
{
catch_fouten($e);
}
}
?>
Reacties
0