Skip to main content

PDO class

In de vorige lessen hebben we een calculator gemaakt en hebben hier een cookie als mini-database-je gebruikt. We gaan nu een 'echte' database verbinding maken.Als het goed is hebben we al eerder met PDO gewerkt. We gana even kort herhalen hoe het ook al weer zat met PDO en dan gaan we een eigen class maken met PDO. Met die class kunnen we dan eenvoudig gegevens opslaan en opvragen.

We gaan dus:

  1. een stukje PDO herhalen
  2. en een PDO database class maken

PDO wordt gebruikt om een verbinding met een database te maken en om via deze verbinding gegevens op te slaan, te wijzigen, te verwijderen of op te vragen (insert, update, delete, select).

Vorig jaar heb je PDO gebruikt op de (ongeveer) de volgende manier:

 <?php
$servername = "localhost";
$username = "username";
$password = "password";

try {
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
    }
catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
?> 

Gebruik deze code om te controleren of PDO goed werkt en of je de username en password van je database nog weet.

Gebruik je root als username? Waarom is dit onverstandig?

In PDO heb je een aantal stappen die je moet doorlopen om een query uit te voeren:

  1. De verbinding maken; dit hoeft maar één keer.
  2. De query klaarzetten (prepare).
  3. De query uitvoeren (execute).
  4. De resultaten uitlezen (fetch).

Somigen queries hebben geen resultaten, dan is stap 4 niet nodig.

We gaan nu een PDO object maken waarin we deze stappen proberen samen te voegen.

Omdat het maken van de verbinding maar één keer nodig is, zetten we dit in de __construct van de class.

Weet je nog wat de __construct method (functie) doet? In

https://www.youtube.com/watch?v=7MVOpcKVr_g

kun je nog een keer bekijken hoe de __construct ook alweer werkt.

De PDO class ziet er uit zoals hieronder. Bekijk de code en zorg dat je alles begrijpt. Vul de code aan op de plaats waar ... staan.

<?php

// Define DB Params
define("DB_HOST", "localhost");
define("DB_USER", "");
define("DB_PASS", "");
define("DB_NAME", "");

class DB{
	protected $dbh;
	protected $stmt;
    protected $resultSet;

	public function __construct(){
		$this->dbh = new PDO(....); // zoek op hoe je de verbinding maakt en vul de juiste code op de plaats van de puntjes
        $this->resultSet=[];
	}

	public function execute($query){
        $this->stmt = $this->dbh->prepare($query);
      	// haal nu het resultaat binnen in $result door de query nu uit te voeren.
  		......
        if (! $result) {
            die('<pre>Oops, Error execute query '.$query.'</pre><br><pre>'.'Result code: '.$result.'</pre>');
        }
		$this->resultSet = $this->stmt->fetchAll(PDO::FETCH_ASSOC);
        // return nu de hele resultSet
      	.....
	}

    public function getRow(){
		// lees het array waarin de resultaten staan uit, regel voor regel. Elke keer als deze functie wordt
        // aangeroepen return je de volgende regel.
        // Gebruik de array_shift functie en zoek op hoe je deze moet gebruiken.
      	.....
        .....
        .....
        .....
        .....
    }
}
?>

Maak nu een test-database en een testtabel.

Creeer een database 'flights' en maak een tabel met testdata met het volgende script via PHPMyAdmin

CREATE TABLE `airlines` (
  `code` char(2) NOT NULL,
  `airline` varchar(40) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `airlines` (`code`, `airline`) VALUES
('AA', 'American Airlines Inc.'),
('AS', 'Alaska Airlines Inc.'),
('B6', 'JetBlue Airways'),
('DL', 'Delta Air Lines Inc.'),
('EV', 'Atlantic Southeast Airlines'),
('F9', 'Frontier Airlines Inc.'),
('HA', 'Hawaiian Airlines Inc.'),
('IA', 'AIRLINE'),
('MQ', 'American Eagle Airlines Inc.'),
('NK', 'Spirit Air Lines'),
('OO', 'Skywest Airlines Inc.'),
('UA', 'United Air Lines Inc.'),
('US', 'US Airways Inc.'),
('VX', 'Virgin America'),
('WN', 'Southwest Airlines Co.');

Maak nu een nieuw project met de volgende files en folder structuur:

/includes/db.php
crud.php
view.html

De db.php bevat de class DB zoals je die hierboven heb gemaakt. Met de crud.php file gaan we een CRUD pagina maken en met de view.html gaan de data aan de gebruiker laten zien.