PDO en Exceptions

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior DevOps-ontwikkelaar eIDAS

Functie­omschrijving Burgers en bedrijven veilig en betrouwbaar digitaal toegang geven tot diensten en producten van het ministerie van Economische Zaken en Klimaat. Als senior DevOps-ontwikkelaar bouw je daar letterlijk aan mee. En dat doe je bij DICTU: een van de grootste en meest vooruitstrevende ICT-dienstverleners van de Rijksoverheid. Jij werkt mee aan de doorontwikkeling van eIDAS, dat staat voor Electronic IDentification Authentication and trust Services. Deze koppeling maakt de grensoverschrijdende authenticatie op overheidswebsites binnen de Europese Unie mogelijk. Het ministerie van Economische Zaken en Klimaat heeft één moderne toegangspoort voor zijn diensten en inspecties. Enkele daarvan zijn dankzij eIDAS inmiddels

Bekijk vacature »

Mr D

Mr D

31/01/2008 17:30:00
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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();
}

?>


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?
 
PHP hulp

PHP hulp

07/07/2020 07:24:07
 
Jan geen

Jan geen

31/01/2008 17:38:00
Quote Anchor link
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
 
Stien ss

stien ss

31/01/2008 17:41:00
Quote Anchor link
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
 
Mr D

Mr D

31/01/2008 19:00:00
Quote Anchor link
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
 
Stien ss

stien ss

31/01/2008 19:28:00
Quote Anchor link
Oh zo.. dus je wilt dat alleen geinstert wordt wat er kan..
Je zou zoiets kunnen doen:

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
<?php
$exists
= array ();
$stmt = $db->prepare('INSERT INTO land (naam) VALUES (:land)');
foreach($this->landen as $land){
    try {
         $stmt->bindParam(':land', $land, PDO::PARAM_STR);
         $stmt->execute();

    }
catch ( PDOException $e ) {
         $exists[] = $land;

    }
}

?>


Dan wordt alles geinsert, en alles wat niet gelukt is staat in de array $exists.
 



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.