SQL Beginnershandleiding

  1. Inleiding
  2. De eerste tabel
  3. De database benaderen vanuit PHP
  4. PDO: De database benaderen vanuit PHP
  5. Invoegen van records
  6. PDO: Invoegen van records
  7. Selecteren van records
  8. PDO: Selecteren van records
  9. Wijzigen van records
  10. PDO: Wijzigen van records
  11. Verwijderen van records
  12. PDO: Verwijderen van records
  13. Sleutels en constraints
  14. Selecteren uit meerdere tabellen: JOINS
  15. Werken met data en tijden
  16. Aggregate functies en GROUP BY
  17. Debuggen: het oplossen van SQL fouten
  18. Slotwoord en referenties
  19. 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
<?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_ERRMODEPDO::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
<?php
$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
<?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
<?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);
}
?>

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.

Vorige Volgende