## PHP verbinden met MariaDB container

Nu we de standaard PHP container hebben draaien en de `phpinfo` zichtbaar hebben op de website kunnen we een 2de image gaan maken en deze met een PDO verbinding de database ophalen uit de vorige les.

Zorg er dus voor dat de MariaDB container draait met daarin een `test_db`, ga na of deze draait en of er een database aanwezig is.

Met docker ps draaien er nu 2 containers:

`CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d77d71d759e1 my-php "docker-php-entrypoi…" 46 minutes ago Up 46 minutes 0.0.0.0:80->80/tcp my-php-app
2e11bc5dcba4 mariadb "docker-entrypoint.s…" 5 hours ago Up 43 minutes 3306/tcp mariadbdemo`

Het is dus zaak dat er een interne MariaDB draait, met geen poorten open op de host server.

We gaan een nieuwe image maken voor de php met pdo verbinding. Maak hiervoor in je home-directory een nieuwe directory:

    mkdir php-pdo && cd php-pdo

maak hierin een directory voor de website:

    mkdir web-pdo && cd web-pdo

Maak hierin een `index.php`:

    nano index.php

Plaats daarin je php met daarin de PDO verbinding:

    <?php

    $user = "root";
    $password = "password";
    $database = "db_noorderpoort";
    $table = "Teachers";
    try {
      $db = new PDO("mysql:host=172.17.0.2;dbname=$database", $user, $password);
      echo "<h2>Print Teachers Noorderpoort</h2><ol>";
      foreach($db->query("SELECT FirstName FROM $table") as $row) {
        echo "<li>" . $row['FirstName'] . "</li>";
      }
      echo "</ol>";
    } catch (PDOException $e) {
        print "Error!: " . $e->getMessage() . "<br/>";
        die();
    }
    ?>

Zorg ervoor dat de namen/IP-adres/Wachtwoorden/databases/tabellen overeenkomen met jouw omgeving!

Het (interne-docker)ip-adres van je MariaDB haal je op met:

    docker inspect mariadbdemo | grep IPAddress

Als dit gereed staat ga je 1 directory terug naar:

    cd ~/php-pdo

Hier maak je de `Dockerfile` met de volgende inhoud:

    FROM php:8.0-apache
    COPY ./web-pdo/ /var/www/html/
    RUN docker-php-ext-install pdo pdo_mysql

Zie dat er een php installatie plaats vindt om pdo verbindingen mogelijk te maken.

Maak nu van je Dockerfile een image:

    docker build -t my-php-pdo .

En run daarna de image op een andere poort dan poort 80:

    docker run --name my-php-pdo -p 8080:80 -d my-php-pdo

met `docker ps` controleren of de container draait:

`CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85dff9d35bfe my-php-pdo "docker-php-entrypoi…" 23 minutes ago Up 23 minutes 0.0.0.0:8080->80/tcp my-php-pdo
d77d71d759e1 my-php "docker-php-entrypoi…" 46 minutes ago Up 46 minutes 0.0.0.0:80->80/tcp my-php-app
2e11bc5dcba4 mariadb "docker-entrypoint.s…" 5 hours ago Up 43 minutes 3306/tcp mariadbdemo`

Daarna ga je naar de website met een browser om te zien of je database nu beschikbaar is op de website.