MYSQL basisvaardigheden

Om dynamische content weer te geven op je website kun je gebruik maken van PHP in combinatie met MySQL. In deze tutorial word er van uit gegaan dat je weet hoe je een PHP pagina aan kan maken en een MySQL database.

Een verbinding maken tussen PHP en MySQL

Als eerste maken we een verbinding tussen de PHP pagina en de MySQL database. Zonder deze verbinding te leggen weet de PHP pagina niet waar hij zijn gegevens vandaan moet halen, en zal er een fout optreden.

PHP
  1. $link = mysql_connect('localhost', 'username', 'wachtwoord');
  2. if (!$link) { die('Niet verbonden : ' . mysql_error()); }


In het bovenstaande stukje code geven we aan dat we verbinding willen maken met de localhost. Dat betekend dat we een verbinding maken met dezelfde computer als waar de website op draait. Het is dus ook mogelijk om een verbinding te leggen met een database op een andere computer/server, maar dat is meestal niet nodig. Dit is de meest voorkomende setup. Ook geven we een username en een wachtwoord mee om toegang te krijgen tot de database server. Dit spreekt voor zich.

De tweede regel is er voor om te zorgen dat er een foutmelding getoond word op het moment dat de verbinding niet gemaakt kon worden om wat voor reden dan ook. Het commando die() laat het uitvoeren van de hele pagina stoppen en toont de melding die tussen de haakjes mee gegeven word. In dit geval de tekst "Niet verbonden: " met daarachteraan de mysql error melding die de server terug geeft. Bijvoorbeeld dat het wachtwoord niet goed is.

Een database selecteren

PHP
  1. $db_selected = mysql_select_db('database_naam', $link);
  2. if (!$db_selected) { die ('Kan de database niet gebruiken : ' . mysql_error()); }


Daarna moeten we aangeven uit welke database we de gegevens willen gaan halen. De eerste parameter van de functie mysql_select_db is de naam van de database waar we een verbinding mee maken. De tweede parameter is de variabele $link, die de connect met de database server bevat die we in het vorige stukje code gelegd hebben.

Ook hier word in de tweede regel een foutmelding getoond als er iets niet goed is gegaan. Meestal zal de melding zijn dat de database niet gevonden kon worden. Dit komt vaak door een typfout in de database naam. Let wel op, want de database server is gevoelig voor hoofd- en kleine letters!

Na deze twee stappen kunnen we acties uit gaan voeren op de tabellen in de database.

Een INSERT query uitvoeren

PHP
  1. $q = "INSERT INTO
  2.        `adresboek`
  3.      SET
  4.        `naam`='". $naam ."',
  5.        `email`='". $email ."'
  6.      ";


Met een INSERT query kunnen we een nieuwe record aanmaken in een tabel. Als eerste valt je waarschijnlijk al op dat de query over meerdere regels verspreid staat. Dat is expres gedaan om de leesbaarheid bij complexe querys hoog te houden. Bij een dergelijke simpele query is het eigenlijk niet nodig, maar het is wel goed om je dit al meteen goed aan te leren.

Als je een query goed schrijft kun je deze als het ware lezen. De bovenstaande query zou je kunnen lezen als: "VOEG IETS IN adresboek EN ZET DAAR naam=$naam EN email=$email.

Een tweede wat je op valt is het gebruik van alle verschillende quotes (aanhalingstekens). De gehele query omvat je in dubbele quotes ("), de namen van de tabel en de kolommen omvat je in de schuine quotes - hoe heten die eigenlijk? - (`) en de waardes die je zet omvat je met enkele quotes (').

De reden dat de namen van de kolommen en tabellen altijd tussen schuine quotes moeten staan is dat je zo ook zogenaamde preserved, ofwel gereserveerde, namen kan gebruiken. Als je bijvoorbeeld een kolom "order" zou willen noemen (om bijvoorbeeld de volgorde van sorteren van iets op te slaan) dan kan dat, maar in een query zou de naam van deze kolom dan aangezien worden als het MySQL commando ORDER BY.

Een record aanpassen met een UPDATE query

PHP
  1. $q = "UPDATE
  2.        `adresboek`
  3.      SET
  4.        `naam`='". $naam ."',
  5.        `email`='". $email ."'
  6.      WHERE
  7.        `id`='". $id ."'
  8.      ";


Deze bovenstaande UPDATE query lijkt heel veel op de voorgaande INSERT query, en dat klopt ook. In principe doe je hetzelfde alleen geef je hier aan welke record dat je aan wil passen, in plaats van een nieuwe toevoegen aan het eind van de tabel.

Een record verwijderen met een DELETE query

PHP
  1. $q = "DELETE FROM
  2.        `adresboek`
  3.      WHERE
  4.        `id`='". $id ."'
  5.      ";


Bovenstaande DELETE query is nog eenvoudiger als de andere queries. Heel simpel gezegd verwijder je hier een (of meerdere!) records die overeen komen met de voorwaarde die je mee geeft. In dit geval is dat het ID dat overeen moet komen met de waarde die je doorgeeft. Maar dat kan ook bijvoorbeeld alle records zijn met een id hoger dan 10 (`id`>'10') of alle records in een bepaalde categorie (`categorie`='photoshop').

Records ophalen uit de database

Nu we weten hoe we records kunnen invoeren, aanpassen en verwijderen willen we natuurlijk ook weten hoe we ze op kunnen halen om ze ergens in weer te geven. Dit doe je met een SELECT query. Dit is een heel simpele query, maar biedt veel mogelijkheden.

PHP
  1. $q = "SELECT
  2.        *
  3.      FROM
  4.        `adresboek`
  5.      ";
  6. $result = mysql_query($q);
  7. while ($row = mysql_fetch_assoc($result)) {
  8.     print_r($row);
  9. }


In de bovenstaande query zeggen we heel eenvoudig tegen de database server: "SELECTEER alle kolomen UIT DE TABEL adresboek". Het while loopje eronder toont daarna alle rijen van de database. De functie mysql_fetch_assoc verwerkt stap voor stap het resultaat dat de database terug heeft gegeven.

Maar stel nu dat we alleen alle namen op willen halen uit een database met contactgegevens. Als je een sterretje (*) gebruikt in de query, dan geef je daarmee aan dat je alle kolommen in je resultaat wil hebben. Dat kunnen natuurlijk heel veel kolommen zijn als je veel gegevens in je tabel hebt staan. Als je dus alleen de namen wil, die een samenstelling is van voornaam, tussenvoegsel en achternaam, dan doe je dat als volgt:

PHP
  1. $q = "SELECT
  2.        `voornaam`,
  3.        `tussenvoegsel`,
  4.        `achternaam`
  5.      FROM
  6.        `adresboek`
  7.      ";


De namen die je nu invult na SELECT, komen overeen met de kolommen uit de database. Je krijgt nu dus in je resultaat alleen deze aangegeven kolommen.

Maar stel nu dat je wel alle gegevens op wil halen, maar alleen degene die ouder zijn dan 25, dan kan dat ook. We hebben in onze voorbeelddatabase dus ook een kolom "leeftijd". De query zou er dan zo uit komen te zien:

PHP
  1. $q = "SELECT
  2.        *
  3.      FROM
  4.        `adresboek`
  5.      WHERE
  6.        `leeftijd` > '25'
  7.      ";


Vertaald naar lees-taal staat hier dus: "SELECTEER alle kolommen UIT DE TABEL adresboek WAAR leeftijd IS MEER DAN 25".

Maar goed, wat nu als je heeel veel mensen in je adresboekje hebt staan, en je wil alleen de eerste 20 mensen zien die ouder zijn dan 25?

PHP
  1. $q = "SELECT
  2.        *
  3.      FROM
  4.        `adresboek`
  5.      WHERE
  6.        `leeftijd` > '25'
  7.      LIMIT
  8.        20,0
  9.      ";


Dan gebruik je de LIMIT functie. Achter LIMIT typ je twee parameters. Als eerste het aantal records dat je maximaal op wil halen, en als tweede (optioneel, dus die hoeft niet per se) bij welk record je wil beginnen. Dus stel je hebt 100 records en je doet LIMIT 20,0 dan krijg je record 0 tot 20, en doe je LIMIT 20,50 dan krijg je record 50 tot 70.

Wens je nog meer uitleg over een (basis) functie van MySQL, laat het dan even weten in de comments en misschien schrijf ik daar dan ook een stukje over!

Comments

Name: Henk van Mierlo (15 July 2009 - 15:46)
Prima en simpele tutorial volgens mij.
Ik loop wel vast op de toepassing ervan. Zo moet je eerst toch een tabel aanmaken voordat je er een INSERT kunt toepassen. Dit heb ik dan eerst maar met PHPMyadmin gedaan.
Dan wordt mij vervolgens ook niet duidelijk hoe je ervoor zorgt dat deze INSERT wordt uitgevoerd. Ik kan hem wel in het PHP doc zetten, maar moet het toch ook submitten op de een of andere manier? Dit kan ook in phpmyadmin, maar dan heb je al bijna geen php meer nodig.

Post a comment

Name:

Comment:

Are you a real person or a spambot?

Copy the text above in the field below: