Versio

PDO Foutafhandeling

Overzicht Reageren

Thijs X

Thijs X

15/12/2007 13:59:00
Quote Anchor link
Hallo allemaal,

Na het lezen van het artikel van Blanche ben ik gelijk begonnen met het implementeren van PDO in mn huidige project.
Echter zit ik met een vraag van hoe jullie precies de foutafhandeling regelen.
Want in het voorbeeld hieronder zie je dat ik aantal keren try/catch gebruik, kan het niet makkelijker en korter?
Graag wat feedback over wat ik overbodig doe, of beter kan!

Heb hier een ingekort voorbeeldje:

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

try
{
    $sql = "
    SELECT
        naam
    FROM
        gebruikers
    WHERE
        email = :email
    LIMIT 1"
;
            
    $stmt = $db->prepare($sql);
}

catch(PDOException $e)
{

    echo '
    <h1>Foutmelding</h1>
    <b>Regelnummer:</b> '
.$e->getLine().'<br />
    <b>Bestand:</b> '
.$e->getFile().'<br />
    <b>Foutmelding:</b> '
.$e->getMessage().'<br />';
}


if(isset($_GET['activatie_code']) && isset($_GET['email']))
{

    try
    {
        $stmt->bindParam(':email', $_GET['email'], PDO::PARAM_STR);
            
        $stmt->execute();
    }

    catch(PDOException $e)
    {

        echo '
        <h1>Foutmelding</h1>
        <b>Regelnummer:</b> '
.$e->getLine().'<br />
        <b>Bestand:</b> '
.$e->getFile().'<br />
        <b>Foutmelding:</b> '
.$e->getMessage().'<br />';
    }

    if($stmt->rowCount() == 1)
    {

        // wat doen
    }
    else
    {
        // wat doen
    }
}

elseif( $_SERVER['REQUEST_METHOD'] == "POST" )
{

    try
    {
        $stmt->bindParam(':email', $_POST['email'], PDO::PARAM_STR);
            
        $stmt->execute();
    }

    catch(PDOException $e)
    {

        echo '
        <h1>Foutmelding</h1>
        <b>Regelnummer:</b> '
.$e->getLine().'<br />
        <b>Bestand:</b> '
.$e->getFile().'<br />
        <b>Foutmelding:</b> '
.$e->getMessage().'<br />';
    }

    if($stmt->rowCount() == 1)
    {

        // wat doen
    }
    else
    {
        // wat doen
    }
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Thijs X
 
PHP hulp

PHP hulp

25/05/2012 09:51:48
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Jelmer rrrr

Jelmer rrrr

15/12/2007 14:22:00
Quote Anchor link
Waarom niet gewoon lekker:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
try {
   // al je code, statements, voorwaarden etc
} catch(Exception $e) {
   // je foutmelding
}
?>


Je exception pas opvangen op het niveau waar je een alternatief aan kan bieden. Daar zit het verschil met dat wat je gewend bent met mysql_error, en dat waar je nu aan zal moeten wennen, exceptions.

En kan dat dan zomaar? Ja, want de code in het try-block die na de exception komt, wordt niet meer uitgevoerd. Dus daar hoef je je niet druk om te maken.
 
Thijs X

Thijs X

15/12/2007 14:43:00
Quote Anchor link
En wat nou als ik bijvoorbeeld een aantal checks nodig heb om mn $_POST invoer te controleren?
Ik controleer bijvoorbeeld eerst of er een email is ingevoerd en of het aan het juiste formaat voldoet en vervolgens of het in de DB voorkomt.

Als het niet is ingevoerd wil ik natuurlijk een nette foutmelding op het scherm printen voor de gebruiker.

Zou je eens een klein voorbeeld kunnen posten met dergelijk voorbeeld wat ik hierboven heb omschreven?
Gewijzigd op 01/01/1970 01:00:00 door Thijs X
 
Thijs X

Thijs X

16/12/2007 16:56:00
Quote Anchor link
Ok dus het zou dan hetvolgende worden?

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);

try
{
    $sql = "
    SELECT
        naam
    FROM
        gebruikers
    WHERE
        email = :email
    LIMIT 1"
;
            
    $stmt = $db->prepare($sql);
    
    if(isset($_GET['activatie_code']) && isset($_GET['email']))
    {

        $stmt->bindParam(':email', $_GET['email'], PDO::PARAM_STR);
        $stmt->execute();
        
        if($stmt->rowCount() == 1)
        {

            // wat doen
        }
        else
        {
            // wat doen
        }
    }

    elseif( $_SERVER['REQUEST_METHOD'] == "POST" )
    {

        $stmt->bindParam(':email', $_POST['email'], PDO::PARAM_STR);
        $stmt->execute();
    
        if($stmt->rowCount() == 1)
        {

            // wat doen
        }
        else
        {
            // wat doen
        }
    }
}

catch(PDOException $e)
{

        echo '
        <h1>Foutmelding</h1>
        <b>Regelnummer:</b> '
.$e->getLine().'<br />
        <b>Bestand:</b> '
.$e->getFile().'<br />
        <b>Foutmelding:</b> '
.$e->getMessage().'<br />';
}

?>
 



Overzicht Reageren