De database benaderen vanuit PHP

Om de database vanuit PHP te benaderen hebben we een groot aantal mogelijkheden tot onze beschikking. De betere manieren om met een database te communiceren zijn bijvoorbeeld via een 'database abstraction layer' zoals PDO of door in het specifieke geval van MySQL gebruik te maken van de MySQLi extensie binnen PHP.

Helaas zijn er op moment van schrijven van deze tutorial nog heel veel hosts die (een van) eerder genoemde methoden niet ondersteund. Omdat ik een tutorial wil schrijven waar iedereen mee uit de voeten kan, zal ik in deze voorbeelden gebruik maken van de mysql_* functies die PHP ons biedt.

Opmerking: de mysql_* functies worden vanaf PHP6 uitgefaseerd en zullen daarna voorgoed verdwijnen. Als je nieuwe scripts schrijft doe je er verstandig aan om voor bijvoorbeeld PDO of MySQLi te kiezen.

Voor meer informatie over de betere manieren kun je terecht in een van onderstaande tutorials:

PDO - Verbinden met verschillende databases
MySQLi - Een nieuwe manier van interactie tussen PHP en MySQL

Toevoeging PDO voorbeelden (23-01-2008)
Aangezien zoals gezegd de mysql_* functies vanaf PHP6 uitgefaseerd worden, heb ik besloten om van elk gegeven PHP voorbeeld, die de basishandelingen van het werken met de database laten zien, ook de PDO variant in deze tutorial op te nemen. Helaas heb ik hier niet de mogelijkheid om paginas aan deze tutorial toe te voegen, de aanvulligen zijn dus vooralsnog enkel via onderstaande link te vinden:

SQL Beginnershandleiding

Verbinden met de database en MySQL in ANSI mode zetten
Om in PHP verbinding te maken met de database, gebruiken we het volgende stukje code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$db
= array (
    'host' => 'localhost',
    'user' => 'root',
    'pass' => '',
    'dbname' => 'test'
);

if(!mysql_connect($db['host'], $db['user'], $db['pass']))
{

    trigger_error('Fout bij verbinden: '.mysql_error());
}

elseif(!mysql_select_db($db['dbname']))
{

    trigger_error('Fout bij selecteren database: '.mysql_error());
}

else
{
    $sql = "SET SESSION sql_mode = 'ANSI,ONLY_FULL_GROUP_BY'";
    if(!mysql_query($sql))
    {

        trigger_error('MySQL in ANSI niet mogelijk');
    }
}

?>

Dit scriptje slaan we op als db_config.php en gebruiken we overal waar we een database verbinding nodig hebben. Wat we feitelijk doen is allereerst een array $cfg aanmaken die een viertal gegevens bevat:

host - De hostname waar de database server te vinden is. Standaard is dat localhost.
user - De gebruikersnaam om in te loggen op de database server.
pass - Het bijbehorende wachtwoord.
dbname - De naam van de database waarmee we willen werken

Verander deze gegevens dus even zodat ze kloppen voor jouw eigen situatie.

Met mysql_connect() proberen we een verbinding te maken met de database, als dat niet lukt geven we een foutmelding met behulp van trigger_error(). Vervolgens selecteren we met behulp van mysql_select_db() de database die we willen gaan gebruiken.

Tenslotte voeren we een sql query uit die MySQL in de ANSI mode zet. Want zoals ik in de inleiding al zei, neemt MySQL het niet zo nauw met de ANSI standaard. Gelukkig kunnen we MySQL op deze manier dwingen om zich meer aan die standaard te houden.

Op elke pagina waar we vervolgens een database verbinding nodig hebben, plaatsen we:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
require_once 'db_config.php';
?>

Uitvoeren van queries
Voor het uitvoeren van queries zal ik in alle voorbeelden een vaste syntax in PHP gebruiken. Deze ziet er als volgt uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$sql
= "";

if(!$res = mysql_query($sql))
{

    trigger_error(mysql_error().'<br />In query: '.$sql);
}

?>

In de variabele $sql zetten we de query die we willen uitvoeren. Vervolgens voeren we met mysql_query() deze query uit en controleren we of deze query gelukt is. Als dat niet het geval is, gebruiken we trigger_error() om een foutmelding te geven. Het is belangrijk om in die foutmelding zowel de foutmelding van MySQL, op te halen met mysql_error(), en de gebruikte query weer te geven. Dat maakt het debuggen een stuk eenvoudiger.

Dit is de basis waarmee we in PHP gaan werken. We zullen zien dat dit stukje script telkens weer in onze code terugkomt.

« Lees de omschrijving en reacties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.