PDO execute, vraagje over gereturnde boolean

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

06/12/2010 11:17:28
Quote Anchor link
Even een vraagje. Ik heb gelezen dat de PDO execute functie een boolean teruggeeft: "Returns TRUE on success or FALSE on failure."

Nu vraag ik me af wat er precies bedoeld wordt met "failure". Gaat het hier om een daadwerkelijke error? Zo ja, wat is dan precies het nut ervan, aangezien je je execute in een try en catch hebt staan?

(Met andere woorden, waarom zou ik via de boolean controleren of er een error is, terwijl mijn errors al worden afgevangen in een try en catch. Of zie ik iets over het hoofd?)
Gewijzigd op 06/12/2010 13:26:05 door Ozzie PHP
 
PHP hulp

PHP hulp

23/11/2024 10:31:40
 
Kris Peeters

Kris Peeters

06/12/2010 11:20:41
Quote Anchor link
Probeer het zelf eens uit.
(Zal ik zelf ook eens doen.)
 
Ozzie PHP

Ozzie PHP

06/12/2010 11:41:57
Quote Anchor link
Mja, da's lastig... als ik een error veroorzaak gooit ie gelijk een error. En als ik dan net van te voren die boolean var_dump dan geeft ie NULL dus dat werkt niet. (Sowieso beetje lastig testen omdat e.e.a. in een framework hangt)
 
Jelmer -

Jelmer -

06/12/2010 11:50:47
Quote Anchor link
PDO kan ook geen exceptions gooien bij errors, maar gewoon trigger_error gebruiken, net als de rest van PHP. En dan is die boolean wel handig. Het ligt er dus aan waar je PDO::ATTR_ERRMODE op hebt staan. Bij PDO::ERRMODE_EXCEPTION heb je er niet zoveel aan.
 
Ozzie PHP

Ozzie PHP

06/12/2010 12:16:32
Quote Anchor link
Ah oke, ik gooi altijd een error als er iets mis gaat :)

(Als er iets mis gaat is het toch altijd een fout van technische aard (ofwel een programmeerfout)? Of is dat niet altijd zo?)
 
Hipska BE

Hipska BE

06/12/2010 13:11:21
Quote Anchor link
De DB server kan bijvoorbeeld tijdelijk niet bereikbaar zijn of plat liggen..
 
Ozzie PHP

Ozzie PHP

06/12/2010 13:25:56
Quote Anchor link
Ja, inderdaad... maar dan is het toch logisch dat je een error gooit? Anders gaat je systeem over z'n nek lijkt me.
 
Kris Peeters

Kris Peeters

06/12/2010 13:28:22
Quote Anchor link
Je moet die resultaten in je logica verwerken.
Dan hoeft het niet allemaal over zijn nek, ...
 
Ozzie PHP

Ozzie PHP

06/12/2010 13:45:14
Quote Anchor link
Nee, maar stel... mijn applicatie heeft gegevens uit de database nodig en zonder die gegevens kan ie niet verder... dan moet ie toch een error gooien? (weliswaar een nette error melding voor de bezoekers). Stel bijvoorbeeld dat deze site gen database connectie kan maken, dan moet er toch ook een error worden gegooid die zegt dat er problemen met de database zijn?
 
Jelmer -

Jelmer -

06/12/2010 16:54:29
Quote Anchor link
Het zijn exceptions, die kan je opvangen en afhandelen waar en hoe je maar wilt. Volgens mij zit deze feature, PDO::ATTR_ERRMODE, er puur in voor persoonlijke voorkeur. Exceptions gooien wanneer er iets mis gaat is de Java-manier van exceptions. Exceptions gooien wanneer er echt iets mis gaat, heeft de voorkeur van anderen, zoals mijn C++ leraar.
 
Ozzie PHP

Ozzie PHP

06/12/2010 18:08:57
Quote Anchor link
Euh, oke... alles leuk en aardig :) maar geef eens een voorbeeld dan wat je kunt doen in plaats van een exception gooien? Stel je database verbinding werkt niet en je kunt dus geen content inladen...
 
Jelmer -

Jelmer -

06/12/2010 19:43:04
Quote Anchor link
Hoppakee, error-handling zonder exceptions.

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
<?php

function showGastenboek()
{

    $posts = getPosts();
    
    if( !$posts)
        return false;
    
    echo '<ol>';

    foreach ($posts as $post)
        echo '<li>' . $post . '</li>';

    echo '</ol>';

    return true;
}

function
getPosts()
{

    global $db;
    
    if (!$stmt->execute())
        return false;
    ..

    
    return $stmt->fetchAll();
}

function
main()
{

    if (!showGastenboek())
    {

        echo "Sorry, de site is vandaag offline";
        return;
    }
}


main();
?>
 
Ozzie PHP

Ozzie PHP

06/12/2010 19:48:05
Quote Anchor link
Mja... oke... ik snap wat je bedoelt, maar stel dat vrijwel alle info uit je database komt (zoals op deze site) wat is dat het verschil tussen het gooien van een error (waarin je een keurige view aanroep waarin een melding wordt getoond) of de manier waarop jij het doet met een echo? Komt toch op hetzelfde neer? Het principe is hetzelfde.
 
Jelmer -

Jelmer -

06/12/2010 19:55:32
Quote Anchor link
Ja, dat komt op hetzelfde neer. (ik had ook vanuit dat idee dat stukje code getypt) Maar wat is je vraag nu? Of je wel of geen exceptions gebruikt is gewoon puur persoonlijke voorkeur. Exceptions gebruiken schept het risico van jumpy code. Je springt zo naar je catch-statement en slaat hele stukken code over. In talen waarin je zelf memory management doet, dus niet PHP, kan dat een behoorlijke headache worden, in PHP zelf ook wel (bijv. wat als je al half de output gegenereerd hebt, hoe weet je hoever je was met de output?) Maar daar staat tegenover dat je niet overal hoeft te controleren op false.
 
Ozzie PHP

Ozzie PHP

06/12/2010 19:59:14
Quote Anchor link
Nee, ik bedoelde meer als volgt... op het moment dat je bijv. geen database connectie hebt, dan gooi ik een error en wordt er verder niks meer uitgevoerd. Tevens wordt er een melding op het scherm getoond. Een andere oplossing zou kunnen zijn dat je toch je gehele site laat opbouwen, maar dat de content dan niet gevuld is. Dat zijn keuzes. Mij lijkt het echter dat wanneer mijn database het niet doet ik dan maar beter meteen alles kan stilleggen :)
 



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.