MYSQL basic skills

17 February 2011

To display dynamic content on your website, you can use PHP combined with MySQL. In this tutorial, I assume you have basic knowledge of PHP and know how to create a DATABASE with phpMyAdmin, Navicat or other database software.

Connecting PHP an MySQL

First we'll have to make a connection between the PHP page and the MySQL database. Without this connection, the PHP script doesn't know where to get his records and an error will occur.

$link = mysql_connect('localhost', 'username', 'password');
if (!$link) { die('Not connected : ' . mysql_error()); }


The "localhost" in the script above tells the script to search for the database on the same computer/server as where the site is. It is possible to connect to a database on a different server, but generally the database is on the same server as the website. This is the most common way of connecting. As second an thirth parameters we enter the username and password required to connect to the database. Almost every database requires a username and password.
The second line of the code is to display an error when the connection could not be established for whatever reason. The command die() lets the script die and stop at that line and display whatever is between te brackets. In this case the string "Not connected: " followed by the exact error the mysql server returned. In most cases this is an error saying the username and password are false.

Selecting a database

$db_selected = mysql_select_db('database_name', $link);
if (!$db_selected) { die (Could not use the database : ' . mysql_error()); }


Afterwards we point the PHP script to the database we should use. A MySQL server can contain multiple databases (for multiple sites on the same server) and with this line we point the script to the right one. The first parameter is the name of the database we want to select. The second parameter $link is the variable containing the connection to the server we made in the first step.
Again we display errors in the second line. In this case the most common error is a misspelled database name. Please note that the database names are case sensitive! After these two steps we an perform queries on the tables in the database!

Execute an INSERT query

$q = "INSERT INTO
        `addressbook`
      SET
        `name`='"
. $name ."',
        `email`='"
. $email ."'
      "
;
mysql_query($q);


With an INSERT query we can insert a new record in a table. At first you'll notice the query is written on multiple lines. I did that on purpose to enhance the readability for complex queries. With queries as simple as these it is overkill, but it is a good thing to familiarise yourself with from the start.

If you write a good query you can "read" it as it were. The query above could be read as "INSERT SOMETHING IN addressbook AND SET name=$name AND 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

$q = "UPDATE
        `adresboek`
      SET
        `naam`='"
. $naam ."',
        `email`='"
. $email ."'
      WHERE
        `id`='"
. $id ."'
      "
;
mysql_query($q);


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

$q = "DELETE FROM
        `adresboek`
      WHERE
        `id`='"
. $id ."'
      "
;
mysql_query($q);


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.

$q = "SELECT
        *
      FROM
        `adresboek`
      "
;
$result = mysql_query($q);
while ($row = mysql_fetch_assoc($result)) {
    print_r($row);
}


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:

$q = "SELECT
        `voornaam`,
        `tussenvoegsel`,
        `achternaam`
      FROM
        `adresboek`
      "
;


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:

$q = "SELECT
        *
      FROM
        `adresboek`
      WHERE
        `leeftijd` > '25'
      "
;


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?

$q = "SELECT
        *
      FROM
        `adresboek`
      WHERE
        `leeftijd` > '25'
      LIMIT
        20,0
      "
;


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!
You must have JavaScript enabled to use this form!

Leave a comment!

  1. Your mail is safe with me. It's only only used to display your Gravatar image!

0 comments

Please feel free to be the first to comment on this page!

By placing a comment you let me know i'm doing a good job. It doesn't have to be constructive, just a "awesome!" makes me really happy! You contribute to a better world!