PDO exception in class

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mark Hogeveen

Mark Hogeveen

29/03/2013 14:48:25
Quote Anchor link
Hallo,

Ik heb een class die in bepaalde methods dus een query doet aan PDO
Dus zo kun je het je voorstellen:
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
<?PHP
class MyClass {
    private $_conn;
    public function connectDatabase() {
         $this->_conn = new PDO("***; ***", ***, ***);
         $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    public function select() {
        // Hier wordt iets geselecteerd uit de database
        $this->_conn->query("SELECT fruitsoort FROM fruit WHERE fruitsoort = 'appel'");
        $aantal = $this->_conn->fetchColumn();
        return $aantal;
    }

    public function update() {
        $this->_conn->exec("UPDATE fruit SET fruitsoort = 'peer' WHERE fruitsoort = 'appel'");
        $aantalUpdated = $this->_conn->fetchColumn();
        return $aantalUpdated;
    }
}

?>


Hoe vang ik nu een error op als er iets misgaat in select() of update() bijvoorbeeld? Moet ik het hele bestand tussen try en catch blokken zetten?
 
PHP hulp

PHP hulp

28/11/2024 03:35:23
 
Erwin H

Erwin H

29/03/2013 15:37:32
Quote Anchor link
Kan, of alleen de binnen de functie zelf, of beide. Het idee bij exceptions is dat je ze afvangt daar waar je ze ook kan afhandelen. Wat je je dus eerst zal moeten afvragen is welke fout je waar wilf afhandelen. Bij een fout in de select bijvoorbeeld kan je ervoor kiezen om die direct af te vangen en een lege resultset (lege array) terug te geven. De rest van je applicatie merkt er dan verder niets van, die ziet gewoon een lege array en moet daar maar mee doen wat het wil/kan.
Bij een update wil je mogelijk ook een melding geven aan de gebruiker dat er iets niet gelukt is. In dat geval is het mogelijk verstandig om een paar niveau's hoger pas de fout af te vangen.

Dit is eigenlijk het hele model van exceptions in een OOP omgeving. Elke class handelt de fouten af die het kan en laat de fouten die het niet kan afhandelen opborrelen naar boven. Uiteindelijk zal je alleen fouten overhouden die echt niet opgelost kunnen worden en dan laat je een simpele foutmelding aan de gebruiker zien.
 
Ozzie PHP

Ozzie PHP

29/03/2013 15:48:13
Quote Anchor link
Wat is eigenlijk het verschil tussen een exception en een if-statement?

Wat is zeg maar het verschil tussen (schematisch):

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
$gelukt = update iets in de database
if (!$gelukt) {
   er is iets misgegaan
}

en

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
try {
   update iets in de database
} catch {
   er is iets misgegaan
}
Gewijzigd op 29/03/2013 15:48:42 door Ozzie PHP
 
Erwin H

Erwin H

29/03/2013 15:51:11
Quote Anchor link
PDO geeft geen false terug bij een error (in elk geval niet in bovenstaan voorbeeld omdat de errormode op ERRMODE_EXCEPTION staat), maar gooit een exception. Het verschil is dus dat het if statement niet zal werken en het try...catch blok wel :-)
 
Ozzie PHP

Ozzie PHP

29/03/2013 15:58:26
Quote Anchor link
Waarom zou het if-statement niet werken? Dat begrijp ik even niet...

Je kunt toch controleren in een if-statement of de query is gelukt?
 
Erwin H

Erwin H

29/03/2013 16:12:43
Quote Anchor link
Nee, dat kan je niet, omdat PDO geen returnwaarde geeft, maar een exception gooit als het misgaat. Je if statement kan dus niet in de else komen als er iets fout gaat, want dan heb jij al die foutmelding op je scherm staan (als je die niet afvangt).
 
Ozzie PHP

Ozzie PHP

29/03/2013 16:19:41
Quote Anchor link
Ah op die manier, oké ik snap 'm :)
 



Overzicht Reageren

 
 

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.