snippet-pdo-exceptions

Gesponsorde koppelingen

PHP script bestanden

  1. snippet-pdo-exceptions

« Lees de omschrijving en reacties

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);  

        
    }
}

?>

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.