SQL Beginnershandleiding
- Inleiding
- De eerste tabel
- De database benaderen vanuit PHP
- PDO: De database benaderen vanuit PHP
- Invoegen van records
- PDO: Invoegen van records
- Selecteren van records
- PDO: Selecteren van records
- Wijzigen van records
- PDO: Wijzigen van records
- Verwijderen van records
- PDO: Verwijderen van records
- Sleutels en constraints
- Selecteren uit meerdere tabellen: JOINS
- Werken met data en tijden
- Aggregate functies en GROUP BY
- Debuggen: het oplossen van SQL fouten
- Slotwoord en referenties
- Reacties op deze tutorial
PDO: De database benaderen vanuit PHP
Zoals ik in het vorige hoofdstuk al vermeldde, zullen de mysql_* functies vanaf PHP6 uitgefaseerd worden. Het is dan ook verstandig om bij het schrijven van nieuwe scripts nu al over te stappen naar een van de betere alternatieven zoals PDO.In deze extra hoofdstukken, die gekenmerkt worden door het stukje 'PDO:' in de titel, zal ik van elk gegeven PHP voorbeeld de PDO variant geven. Meer informatie over PDO is te vinden in deze uitgebreide tutorial:
PDO - Verbinden met verschillende databases
De code van deze PDO varianten zal er wellicht een stuk lastiger uitzien, maar dat wordt voornamelijk veroorzaakt doordat PDO gebruik maakt van de object georiƫnteerde syntax.
Verbinden met de database en MySQL in ANSI mode zetten (PDO)
Om verbinding te maken met de database gebruiken we de volgende code:
Code: db_config.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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$db = array (
'host' => 'localhost',
'dbname' => 'test',
'user' => 'root',
'pass' => ''
);
try
{
$db = new PDO('mysql:host='.$db['host'].';dbname='.$db['dbname'], $db['user'], $db['pass']);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->query("SET SESSION sql_mode = 'ANSI,ONLY_FULL_GROUP_BY'");
}
catch(PDOException $e)
{
$sMsg = '<p>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Foutmelding: '.$e->getMessage().'
</p>';
trigger_error($sMsg);
}
?>
$db = array (
'host' => 'localhost',
'dbname' => 'test',
'user' => 'root',
'pass' => ''
);
try
{
$db = new PDO('mysql:host='.$db['host'].';dbname='.$db['dbname'], $db['user'], $db['pass']);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->query("SET SESSION sql_mode = 'ANSI,ONLY_FULL_GROUP_BY'");
}
catch(PDOException $e)
{
$sMsg = '<p>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Foutmelding: '.$e->getMessage().'
</p>';
trigger_error($sMsg);
}
?>
Ik zal hier niet veel dieper ingaan op de gebruikte constructies dan enkel het benoemen van de belangrijkste onderdelen. Mocht je meer informatie willen, neem dan eens een kijkje in de eerder genoemde tutorial over PDO.
Allereerst maken we nu ook weer de array $db aan waarin we de gegevens voor de database verbinding opslaan. Het verbinden met de database gebeurt vervolgens door een nieuwe instantie van de PDO klasse aan te maken:
Code
1
2
3
2
3
<?php
$db = new PDO('mysql:host='.$db['host'].';dbname='.$db['dbname'], $db['user'], $db['pass']);
?>
$db = new PDO('mysql:host='.$db['host'].';dbname='.$db['dbname'], $db['user'], $db['pass']);
?>
Als parameters geven we de connectiestring, de gebruikersnaam en het wachtwoord op. Elke database kent zijn eigen connectie string, die je terug kunt vinden in de PDO tutorial. Met de volgende twee regels geven we aan welke errormode we willen gebruiken en voeren we de query uit om MySQL in ANSI mode te zetten.
Dit scriptje slaan we wederom op als db_config.php en includen we op elke pagina waar we een database verbinding nodig hebben:
Code
1
2
3
2
3
<?php
require_once 'db_config.php';
?>
require_once 'db_config.php';
?>
Uitvoeren van queries (PDO)
Ook bij het gebruik van PDO zullen we gebruik maken van een standaard syntax voor het uitvoeren van SQL queries. Deze ziet er als volgt uit:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
try
{
$sQuery = "";
$oStmt = $db->prepare($sQuery);
$oStmt->execute();
}
catch(PDOException $e)
{
$sMsg = '<p>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Foutmelding: '.$e->getMessage().'
</p>';
trigger_error($sMsg);
}
?>
try
{
$sQuery = "";
$oStmt = $db->prepare($sQuery);
$oStmt->execute();
}
catch(PDOException $e)
{
$sMsg = '<p>
Regelnummer: '.$e->getLine().'<br />
Bestand: '.$e->getFile().'<br />
Foutmelding: '.$e->getMessage().'
</p>';
trigger_error($sMsg);
}
?>
Deze syntax is geschikt voor het uitvoeren van PDO prepared statements, de enige manier van uitvoeren van queries met PDO die ik in deze tutorial zal behandelen.
De variabele $sQuery wordt gebruikt om de query die we willen uitvoeren, in op te slaan. Vervolgens gebruiken we de methode prepare() om de query aan de database aan te bieden en te laten controleren. Als dat lukt gebruiken we uiteindelijk execute() om de query daadwerkelijk uit te voeren.
De foutafhandeling wordt verzorgd via het try-catch principe. Alle regels code binnen het try-statement worden uitgevoerd. Zodra een fout optreedt in een van de regels wordt de uitvoer onderbroken en wordt het catch-statement uitgevoerd.