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