PDO exception in class
Ik heb een class die in bepaalde methods dus een query doet aan PDO
Dus zo kun je het je voorstellen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;
}
}
?>
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?
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.
Wat is zeg maar het verschil tussen (schematisch):
en
Gewijzigd op 29/03/2013 15:48:42 door Ozzie PHP
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 :-)
Je kunt toch controleren in een if-statement of de query is gelukt?
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).
Ah op die manier, oké ik snap 'm :)