PHP met MySQLi

MySQLi is de andere ingebouwde manier om in PHP met MySQL te werken. PDO heeft de voorkeur, maar MySQLi werkt prima — vooral als je lesmateriaal het gebruikt.

Eerst online zetten
Maak je PHP-app aan onder Cloud → Apps (type PHP) en koppel een database — zie Je project online zetten en Databases bij EduInsights. Daarna staan de DB_* variabelen hieronder klaar.

Verbinding maken

php
<?php
// db-config.php — gebruikt de automatisch ingestelde omgevingsvariabelen
$host = getenv('DB_HOST');
$port = getenv('DB_PORT');
$db   = getenv('DB_NAME');
$user = getenv('DB_USER');
$pass = getenv('DB_PASS');

function getDbConnection(): mysqli {
    global $host, $port, $db, $user, $pass;
    $conn = new mysqli($host, $user, $pass, $db, (int)$port);
    if ($conn->connect_error) {
        die('Verbinding mislukt: ' . $conn->connect_error);
    }
    $conn->set_charset('utf8mb4');
    return $conn;
}
Lokaal ontwikkelen
Op EduInsights staan de DB_* variabelen automatisch klaar; getenv() leest ze direct uit. Werk je lokaal, dan leest PHP niet vanzelf een .env-bestand — zet de variabelen in je eigen omgeving of gebruik een pakket als vlucas/phpdotenv. Voor een lokale MySQL/XAMPP gebruik je DB_HOST=localhost; voor de database op EduInsights DB_HOST=db.eduinsights.nl. Zet een .env nooit in GitHub:
text
.env

Data ophalen

php
<?php
require_once 'db-config.php';
$conn = getDbConnection();

$result = $conn->query('SELECT id, naam, prijs FROM producten');
while ($rij = $result->fetch_assoc()) {
    echo $rij['naam'] . ' — €' . $rij['prijs'] . "\n";
}

Invoegen met een prepared statement

php
<?php
require_once 'db-config.php';
$conn = getDbConnection();

$stmt = $conn->prepare(
    'INSERT INTO producten (naam, prijs) VALUES (?, ?)'
);
// "sd" = string, decimal/double
$stmt->bind_param('sd', $_POST['naam'], $_POST['prijs']);
$stmt->execute();

$nieuwId = $conn->insert_id;
Types bij bind_param
Het eerste argument beschrijft de types: s = string, i = integer, d = double/decimal, b = blob. Eén letter per ?.

Eén rij ophalen met een filter

php
<?php
$stmt = $conn->prepare('SELECT * FROM producten WHERE id = ?');
$stmt->bind_param('i', $_GET['id']);
$stmt->execute();

$product = $stmt->get_result()->fetch_assoc();
Gebruik prepared statements
Bouw queries nooit met "... WHERE id = " . $_GET['id']. Gebruik ?-placeholders. Zie Veiligheid.

Meer in PHP