PDO Foutafhandeling
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)
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
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
}
}
?>
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
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
try {
// al je code, statements, voorwaarden etc
} catch(Exception $e) {
// je foutmelding
}
?>
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.
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
Code (php)
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
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 />';
}
?>
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 />';
}
?>