Sql - foutafhandeling | Geschikt als tutorial?
Algemeene structuur:
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
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
<?php
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',false); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error)
{
echo '<pre>Error: '.$error.'<br />'.$sql.'</pre>';
}
# zet dit waar je query moet
# de query | bij input: let op sql-injectie -> mysql_real_escape_string()
$sql = "
";
# Check of query is gelukt
if (($result = mysql_query($sql)) === false)
{
# als de query fout is -> foutafhandeling
echo 'Fout met database.';
# geef de error via de functie (bovenaan script)
if (DEBUG_MODE)
{
showSQLError($sql,mysql_error());
}
}
else
{
# De query is gelukt
}
?>
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',false); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error)
{
echo '<pre>Error: '.$error.'<br />'.$sql.'</pre>';
}
# zet dit waar je query moet
# de query | bij input: let op sql-injectie -> mysql_real_escape_string()
$sql = "
";
# Check of query is gelukt
if (($result = mysql_query($sql)) === false)
{
# als de query fout is -> foutafhandeling
echo 'Fout met database.';
# geef de error via de functie (bovenaan script)
if (DEBUG_MODE)
{
showSQLError($sql,mysql_error());
}
}
else
{
# De query is gelukt
}
?>
Voorbeeld iets uit de database halen:
Situatie:
we halen de naam van een gebruiker uit de tavel d.m.v. het id van de gebruiker in de url.
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
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
<?php
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',0); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',false); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error)
{
echo '<pre>Error: '.$error.'<br />'.$sql.'</pre>';
}
# zet dit waar je query moet
# de query | bij input: let op sql-injectie -> mysql_real_escape_string()
$sql = "SELECT naam
FROM leden
WHERE id='".mysql_real_escape_string($_GET['id'])."'
";
# Check of query is gelukt
if (($result = mysql_query($sql)) === false)
{
# als de query fout is -> foutafhandeling
echo 'Fout met database.';
# geef de error via de functie (bovenaan script)
if (DEBUG_MODE)
{
showSQLError($sql,mysql_error());
}
}
else
{
# De query is gelukt, we kunnen onze naam uit de database halen d.m.v. mysql_fetch_assoc
$row = mysql_fetch_assoc($result);
echo $_row['naam'];
}
?>
# We zetten dit volledig bovenaan
# errors weergeven
ini_set('display_errors',0); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',false); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error)
{
echo '<pre>Error: '.$error.'<br />'.$sql.'</pre>';
}
# zet dit waar je query moet
# de query | bij input: let op sql-injectie -> mysql_real_escape_string()
$sql = "SELECT naam
FROM leden
WHERE id='".mysql_real_escape_string($_GET['id'])."'
";
# Check of query is gelukt
if (($result = mysql_query($sql)) === false)
{
# als de query fout is -> foutafhandeling
echo 'Fout met database.';
# geef de error via de functie (bovenaan script)
if (DEBUG_MODE)
{
showSQLError($sql,mysql_error());
}
}
else
{
# De query is gelukt, we kunnen onze naam uit de database halen d.m.v. mysql_fetch_assoc
$row = mysql_fetch_assoc($result);
echo $_row['naam'];
}
?>
Gewijzigd op 19/02/2011 22:12:16 door Jasper DS
Is id integer?
ja.
Code (php)
En dan wordt het zo aangeroepen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
if (($result = mysql_query($sql)) === false)
{
# als de query fout is -> foutafhandeling
showSQLError($sql,mysql_error(),'Fout met database.');
}
else
{
# De query is gelukt
}
?>
if (($result = mysql_query($sql)) === false)
{
# als de query fout is -> foutafhandeling
showSQLError($sql,mysql_error(),'Fout met database.');
}
else
{
# De query is gelukt
}
?>
Ja, dat kan inderdaad santhe. Kan je me overtuigen dat dit beter is dan wat ik doe? Behalve dat je minder moet kopiëren?
Ik vind dat als je toch een aparte functie hebt gemaakt, dan kan je die net zo goed altijd gebruiken en niet alleen als de debug-mode aan staat. Het scheelt je ook nog typen want je hebt nu in het script zelf maar één regel nodig in plaats van steeds die if/else constructie.
ok dan zal ik dat wijzigen. Heeft dit een toegevoegde waarde voor de tutorials?
- SanThe - op 19/02/2011 22:57:03:
Het is niet beter of slechter.
Ik vind dat als je toch een aparte functie hebt gemaakt, dan kan je die net zo goed altijd gebruiken en niet alleen als de debug-mode aan staat. Het scheelt je ook nog typen want je hebt nu in het script zelf maar één regel nodig in plaats van steeds die if/else constructie.
Ik vind dat als je toch een aparte functie hebt gemaakt, dan kan je die net zo goed altijd gebruiken en niet alleen als de debug-mode aan staat. Het scheelt je ook nog typen want je hebt nu in het script zelf maar één regel nodig in plaats van steeds die if/else constructie.
Ik denk wel dat het beter is. Je hebt nu namelijk die debug afhankelijkheid op één plek staan, wat toch een stuk makkelijker is in onderhoud. Verder hoort een integer natuurlijk niet tussen quotes, dat kan je ook nog gewoon simpel typecasten.
Tja, wie ben ik om daar over te oordelen. Ik vind de debug-mode, die je simpel aan en uit kan zetten, een pluspunt ten opzichte van 'normale' foutafhandeling.
Dan wijzig ik dat even en dat voeg ik hem toe aan de tuts. (morgen)
Wouter J op 19/02/2011 23:29:54:
Misschien kan je naast mysql_real_escape_string ook even kijken of $_POST['id'] numeric is? (is_numeric())
Beter is nog om gebruik te maken van ctype_digit, aangezien is_numeric() ook waarden accepteert als 1e32, etc. Dit is denk ik niet wat je wilt.
ja dat kan ik doen maar het gaat hem vooral op de structuur van hoe je een query kan afhandelen. :)