InleidingIn de vorige hoofdstukken is de database programmeertaal SQL geïtroduceerd. Deze taal is nodig om gegevens op te vragen of te muteren via een database management programma. Het doel van deze module is een eigen webapplicatie in php te maken die gebruikmaakt van een MySQL database voor de opslag van gegevens. De koppeling van php met de database vindt plaats door vannuit php een verbinding te maken met een database management service. Is de koppeling tot stand gebracht dan kan men vanuit php doormiddel van SQL opdrachten met deze service communiceren. In dit hoofdstuk concentreren we ons alleen op het maken van de verbinding van het php programma met de database management service. Tot slot zal er bij elk hoofdstuk waarin php en sql wordt beschreven een praktijkvoorbeeld staan. Als je de voorbeelden zelf uitvoert, zal je aan het einde een klein programma hebben waarin je gegevens kunt manipuleren met behulp van php/mysql. Aan het einde van dit hoofdstuk weet je :
|
|
|
|
Een verbinding |
|
1Om php en mysql met elkaar te laten samenwerken, zal je in php-code een opdracht tot het maken van een verbinding met de database management service aanwezig moeten zijn. Als de code wordt uitgevoerd wordt er den een verbinding gemaakt tussen de webserver die de php code uitvoert en de mysql database service die op een, mogelijkerwijs andere computer, draait. Als deze verbinding gemaakt kan worden is er daarna de mogelijkheid om gegegevens te kunnen uitwisselen tussen php en de database met behulp van de sql-opdrachten. Door gebruik te maken van formulieren (zie de cursussen javascript en php) kun je vervolgens een gebruikers interface ontwikkelen waar een gebruiker op een beheersbare manier met de gegevens in contact kan komen. Een verbinding maak je door in php de volgende gegevens op te nemen:
Een verbinding maken bestaat uit de volgende stappen:
|
|
|
|
Praktijkvoorbeeld |
|
Opdrachten |
|
voorbeeld 1: test.php |
<?php // opslaan als test.php // toegangsgegevens mysql database service $server = "localhost"; $user = "leerling"; $wachtwoord = "rloleerling"; $database ="garagebedrijf"; $melding = ""; /* We maken hier gebruik van PDO als code om via php met de databasemabager te verbinden. PDO heeft fout afhandeling via PHP exception handling. */ try { // Uitleg connecties maken https://www.w3schools.com/php/php_mysql_connect.asp $db = new PDO("mysql:host=$server;dbname=$database", $user, $wachtwoord); // set the PDO error mode to exception $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $melding = "De verbinding is tot stand gebracht"; // verbreek verbinding $db = null; } catch(PDOException $e) // Doe wat wanneer er een fout is opgetreden { $melding ="Helaas, mysql kan geen verbinding maken: |
voorbeeld 2: database.php |
Bestand 1<?php // sla op als database.php /* eerst definieren we twee global variabelen $db en $melding. Een global variabele is een variabele die we overal in de code kunnen benaderen. Voordelen van een global variabele zijn dat een dergelijke variabele overal vanuit de code benaderbaar is en dat er communicatie mogelijk is vanuit verschillende functies met behulp van deze variabelen zonder dat de functie argumnenten nodig heeft. Een groot nadeel is dat het naarmate projecten groter worden lastig is om globale variabelen goed in het oog te houden. */ global $melding; // zal worden gebruikt voor foutmeldingen in database functies global $db; // zal worden gebruikt om een database connectie in op te slaan $melding = ""; // zet de melding eerst op leeg $db=null; // zet de connectie eerst op null /* maakVerbinding maak een verbinding met de database. */ function maakVerbinding() { global $melding; // zorg dat je de globale variabele $melding gaat gebruiken global $db; // zorg dat je de globale variabele $db gaat gebruiken $server = "localhost"; $user = "leerling"; $wachtwoord = "rloleerling"; $database ="garagebedrijf"; if($db !== null) { $melding = "Er is al een verbinding"; } else { try { $db = new PDO("mysql:host=$server;dbname=$database", $user, $wachtwoord); // set the PDO error mode to exception $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $melding = "Connectie met database gemaakt"; } catch(PDOException $e) { $melding = "Helaas, mysql kan geen verbinding maken: " . $e->getMessage(); $db = null; } } return $db; } /* verbreekVerbinding verbreekt de connectie met de mysql server en zet de globale variabele $db weer op de startwaarde. */ function verbreekVerbinding() { global $db; if($db) { $db=null; } } ?> Bestand 2<?php // sla op als algemeen.php /* toonVerbindingStatus() is een fucntie die de database connectie test. Het resultaat is een tekst die het succes of niet van het maken van de connectie met de database manager weergeeft */ function toonVerbindingStatus() { $uitvoer=""; // initialisatie van variabele om uitvoer in te plaatsen $melding=""; // initialisatie van variabele om connectie foutmelding in te plaatsen global $db; // Haal een verwijzing naar de huidige connectie in database.php // maak verbinding maakVerbinding($db,$melding); if(!$db) // test verbinding { // mislukt $uitvoer=$melding; } else { $uitvoer=$melding; // Volgende is niet nodig maar alleen om functionaliteit maakVerbinding te laten zien // verbind nog een keer maakVerbinding($db,$melding); $uitvoer.="<br/>".$melding; //sluit database verbreekVerbinding(); // verbind nog een keer; maakVerbinding($db,$melding); $uitvoer.="<br/>".$melding; verbreekVerbinding(); } return $uitvoer; } //einde van het PhP blok ?> Bestand 3
<?php
// sla op als index.php
// ophalen externe code
require_once("database.php");
require_once("algemeen.php");
/* declareren van variabelen die we in de rest van de code in
dit document nodig hebben
*/
$actie="toonVerbindingStatus";
$uitvoer = "";
// afhandelen actie ofwel uitvoer maken
// Vertel hier wat een switch ook weer doet.
switch($actie)
{
case "toonVerbindingStatus": $uitvoer = toonVerbindingStatus(); break;
default: $uitvoer = "Er is niets te doen"; break;
}
// html uitvoer
echo <<<END
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Page title</title>
</head>
<body>
$uitvoer<br/>
</body>
</html>
END;
//einde van het PhP blok
?>
|
|