PDO en Exceptions
mijn database geeft keurig het volgende terug:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry....
Het probleem is dat het script hierdoor gelijk doorspringt naar het eerst volgende catch blok.
Een klein stukje code
Hoe kan je dit soort dingen het beste oplossen? Om om elke query een apart try met bijbehorende catch te zetten lijkt me ook niet de beste oplossing?
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry....
Het probleem is dat het script hierdoor gelijk doorspringt naar het eerst volgende catch blok.
Een klein stukje code
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$stmt = $db->prepare('INSERT INTO land (naam) VALUES (:land)');
foreach($this->landen as $land){
$stmt->bindParam(':land', $land, PDO::PARAM_STR);
$stmt->execute();
}
?>
$stmt = $db->prepare('INSERT INTO land (naam) VALUES (:land)');
foreach($this->landen as $land){
$stmt->bindParam(':land', $land, PDO::PARAM_STR);
$stmt->execute();
}
?>
Hoe kan je dit soort dingen het beste oplossen? Om om elke query een apart try met bijbehorende catch te zetten lijkt me ook niet de beste oplossing?
Lijkt me wel? bij de oude mysql functies controleerde je toch ook of elke query gelukt was?
Gewijzigd op 01/01/1970 01:00:00 door Jan geen
Over het algemeen zal je applicatie meerdere lagen hebben. Wat je bijvoorbeeld kan doen, is op een hogere laag een try catch maken en dan aan de gebruiker aan bieden wat er fout is gegaan.
Je wilt je exceptions pas afhandelen wanneer je een alternatief aan kan bieden.
Dus stel ik heb zoiets:
Main
Controller
Model - geeft PDO Exception.
Dan wil je op je Controller laag pas je try en catch hebben zodat je een ander model kan laden ipv die een fout geeft.
Het zou eventueel ook nog op de Main laag kunnen.
Hopelijk snap het een beetje
Je wilt je exceptions pas afhandelen wanneer je een alternatief aan kan bieden.
Dus stel ik heb zoiets:
Main
Controller
Model - geeft PDO Exception.
Dan wil je op je Controller laag pas je try en catch hebben zodat je een ander model kan laden ipv die een fout geeft.
Het zou eventueel ook nog op de Main laag kunnen.
Hopelijk snap het een beetje
ik snap het principe wel aardig. Het probleem hier is dat er eigenlijk niks fout gaat, maar dat ie wel naar de catch toe springt, waardoor de rest niet meer wordt uitgevoerd.
Een andere oplossing zou kunnen zijn om eerst met een SELECT te kijken of een record al bestaat, maar dat lijkt me ook niet een optimale oplossing
Een andere oplossing zou kunnen zijn om eerst met een SELECT te kijken of een record al bestaat, maar dat lijkt me ook niet een optimale oplossing
Oh zo.. dus je wilt dat alleen geinstert wordt wat er kan..
Je zou zoiets kunnen doen:
Dan wordt alles geinsert, en alles wat niet gelukt is staat in de array $exists.
Je zou zoiets kunnen doen:
Code (php)
Dan wordt alles geinsert, en alles wat niet gelukt is staat in de array $exists.




