snippet-pdo-exceptions
Gesponsorde koppelingen
PHP script bestanden
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
<?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);
}
}
?>
//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);
}
}
?>