Cursussen/Courses Codesnippets     Top 
PHP - MySQL databases


1. MySQL database
Bij grote projecten waarbij een interactieve website wordt uitgebouwd is het aangewezen om een database te gebruiken. In PHP zijn er voor de verschillende database systemen bibliotheken ter beschikking gesteld.
Zo kan je gebruik maken van de MySQL functies. Hierbij wordt er een onderscheid gemaakt tussen een object-georiënteerde of een procedurele aanpak. In de beide gevallen maak je gebruik van “Mysqli_” functies (de i staat voor “improved”).
Als je een ander database management systeem wil gebruiken kan je met de PDO (PHP Data Objects) functies hetzelfde resultaat bekomen.
Om er voor te zorgen dat de website beveiligd is tegen “SQL-injection” kan je best “prepared statements” maken. Hierbij worden de waarden van de invulvelden op een later tijdstip toegevoegd aan de SQL query (of SQL statement).


2. Stappenplan
Om informatie uit een MySQL database op te halen moet je de volgende stappen uitvoeren:
1. een verbinding maken met de MySQL server;
2. een MySQL database selecteren;
3. een query string samenstellen;
4. de query uitvoeren;
Afhankelijk van het soort query (een select query of een actie query (insert, update, delete)) zal je dan andere stappen moeten uitvoeren.
Bij een select query kan je na de eerste 4 stappen het resultaat verder gebruiken om de records te tonen in een gebruikersinterface.
Bij een actie query moet je het resultaat van de query controleren om te vernemen of de actie geslaagd is. Het is gebruikelijk om een foutboodschap te tonen als de terugkeerwaarde van de functie mysqli_query() niet 1 is.
Na de query kan je de verbinding met de MySQL server sluiten indien nodig.


3. Voorbeelden
In de onderstaande voorbeelden worden 3 verschillende manieren getoond om met een MySQL database te werken.
In het eerste voorbeeld wordt een object van de klasse MySQLi gebruikt.
In het tweede voorbeeld worden de (verouderde) functies van MySQLi gebruikt.
In het derde voorbeeld wordt een object van de klasse PDO gebruikt. De PDO klasse (PHP Data Objects) heeft vele methodes die ook kunnen gebruikt worden met een ander database management systeem.
De methodes van de PDO klasse om een 'prepared' statement te maken zijn belangrijk bij de bestrijding tegen 'SQL injection'.
<?php
//MySQLi (object):
$conn = new mysqli($host, $user, $password,$dbname);
if ($conn->connect_errno) {
  echo "Toegang werd geweigerd.<br>"
	. "De combinatie gebruikersnaam en paswoord is (nog) niet bekend.<br>";
}
$sql = "select * from consultatie where consultatienummer=" . $_GET['id'];
if ($result = $conn->query($sql)) {
  $row = $result->fetch_assoc();
}
//MySQLi (procedure):
$conn = @mysqli_connect($host, $user, $password,$dbname) or die (
	"Toegang werd geweigerd.<br>"
	. "De combinatie gebruikersnaam en paswoord is (nog) niet bekend.<br>"
	);
$result = @mysqli_select_db($conn,$dbname) or die (
	"Database selectie mislukt !<br>"
	);
if ($conn == true) {
	$sql = "select * from patient where dossiernummer=" . $id;
	if ($result = @mysqli_query($conn,$sql)) {
		if (mysqli_num_rows($result) > 0) {
			$row = mysqli_fetch_assoc($result);
		}
	}
}

//PDO (object):
try {
$conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
echo "Toegang werd geweigerd.<br>"
. "De combinatie gebruikersnaam en paswoord is (nog) niet bekend.<br>";
}	
$sql = "INSERT INTO mutualiteit(naam, adres, gemeente, telefoonnummer, contactpersoon)"
	. " VALUES (:naam,:adres,:gemeente,:telefoonnummer,:contactpersoon)";
$result = $conn->prepare($sql);
$result->execute(array(':naam'=>$this->naam,
			  ':adres'=>$this->adres,
			  ':gemeente'=>$this->gemeente,
			  ':telefoonnummer'=>$this->telefoonnummer,
			  ':contactpersoon'=>$this->contactpersoon));
if ($result->rowCount() > 0) {
	return $result;
} else {
	return 0;
}


4. Bijkomende informatie
Je kan meer informatie vinden op de onderstaande websites.
Create database en create table voorbeelden:
Create
Insert, update, delete voorbeelden (prepared statements!):
Insert  Update  Delete
Prepared statements:
Prepared
In het PHP Mysql onderdeel van:
Coursesweb
In de PHP documentatie van:
Docs
=> Kies voor English chm file. Je moet de blokkering van het bestand opheffen in de Eigenschappen van het bestand!
In de help teksten (PHP documentatie) kan je de Mysqli functies vinden onder:
- Function reference >> database extentions >> vendor specific database extentions >> MySQL
De PDO functies vind je in de help teksten onder:
- Function reference >> database extentions >> abstraction layers >> PDO