Registreren

    Informatie

    Het is heel gemakkelijk om lid te worden. Door je gegevens op te geven op de registratie pagina ontvang je automatisch een email met je inlog gegevens.

  • Registreer je hier

Aanmelden

    Informatie

    Omdat je niet aangemeld bent is het gebruikerspaneel niet beschikbaar. Vul hiernaast je gegevens in om gebruik te maken van het gebruikerspaneel.

Aanmeldformulier


MySQL in PHP

Structured Query Language is een ANSI/ISO-standaardtaal voor een relationeel 'database management systeem' (DBMS). Het is een gestandaardiseerde taal die gebruikt kan worden voor taken zoals het bevragen en het aanpassen van gegevens in een relationele databank. SQL kan met vrijwel alle moderne relationele databankproducten worden gebruikt. SQL is een vierde-generatie-taal (G4-taal) omdat ze niet imperatief maar declaratief is, zoals Prolog.

MySQL in PHP

Berichtdoor Theo » 04 Sep 2008 00:04

Inleiding
Wanneer we in PHP gaan werken met databases dan is MySQL de meest gebruikte. In dit artikel ga ik meer vertellen over de functies in PHP waarmee we gegevens uit de database kunnen halen en weer kunnen geven.


Verbinden met de server
Alvorens we gegevens in de database kunnen zetten of eruit kunnen halen moeten we verbinding maken met de MySQL server. Dat doen we door middel van de functie mysql_connect(). Dat doen we als volgt:

PHP
Code: Alles selecteren
<?php
$verbinding 
= mysql_connect( "localhost", "gebruikersnaam", "wachtwoord" ) or die( "Kan geen verbinding maken met de server" );
?>

Achter mysql_connect() hebben we or die(...) gezet. Mocht PHP geen verbinding kunnen maken met de server, dan geeft hij dat netjes aan. Dit kan bijvoorbeeld zijn doordat de server niet werkt, of één of meerdere gegevens onjuist zijn.

Nu we contact hebben met de server kunnen we een database selecteren. Uit deze database kunnen we dan straks de gegevens halen. Contact leggen met de database doen we als volgt:

PHP
Code: Alles selecteren
<?php
$db 
= mysql_select_db( "databasenaam" ) or die( "Kan niet verbinden met de database." );
?>

Ook hier zetten we weer or die(...) erachter. Mocht PHP de database dan niet kunnen vinden, dan geeft hij wederom de foutmelding.

Ten slotte willen we aan het einde van ons document de verbinding met de server verbreken. Dat doen we met het commando mysql_close(). Tussen de haakjes geven we de variabele van de verbinding. Als we er niet tussen zetten, wordt de laatst geopende verbinding gesloten.


Query's uitvoeren
Nu we verbinding kunnen maken met de server hebben we de mogelijkheid om query's uit te voeren. Dat betekent dat we gegevens kunnen toevoegen, aanpassen, verwijderen en ophalen. Om een query uit te voeren gebruiken we in PHP de functie mysql_query(). Deze kent twee parameters. De eerst is de query die uitgevoerd moet worden, de tweede is de link_identifier. Dat is de variabele van de verbinding. Deze gebruik je alleen wanneer je meerdere verbindingen open hebt staan. Doorgaans (voor kleine applicaties) is dit dus niet het geval en kun je de tweede parameter weg laten.

We zagen net bij het verbinding maken dat we achter de functie or die(...) zetten. Dat doen we bij query's uitvoeren ook. Alleen vullen we hem dan aan met mysql_error(). Mocht er dan een fout in de query zitten dan geeft mysql_error() aan wat de fout is. Dit is dus erg makkelijk met debuggen.

Je hebt mysql_error() dus niet nodig om een query uit te kunnen voeren, maar het is wel erg makkelijk. Een voorbeeld:

PHP
Code: Alles selecteren
<?php
$sql 
= "SELECT `id`, `naam`, `achternaam` FROM `contacten`";
$query = mysql_query( $sql ) or die( mysql_error() );
?>

Nu hebben we dus de gegevens in de variabele $query zitten. Als je deze nu echo't krijg je als output Resource Id #... De gegevens zullen dus omgezet moeten worden.


Gegevens ophalen
Voor het ophalen gebruiken we even de volgende fictieve database:

Afbeelding

Alvorens we de gegevens gaan weergeven gaan we eerst kijken of er wel gegevens zijn om weer te geven. Het kan zijn dat je een WHERE statement in je query hebt. Bijvoorbeeld wanneer we alle mensen willen weergeven die Jansen heten. Maar het kan zijn dat die niet voorkomen in je database.

Om foutmeldingen te voorkomen gaan we dus eerst controleren of er gegevens in de database staan.

PHP
Code: Alles selecteren
<?php
$sql 
= "SELECT `id`, `naam`, `achternaam` FROM `contacten` WHERE `achternaam` = 'Jansen'";
$query = mysql_query( $sql ) or die( mysql_error() );
 
if( mysql_num_rows( $query ) == 0 )
{
   echo "Er zijn geen resultaten gevonden.";
}
else
{
   ....
}
?>

Met de functie mysql_num_rows() kun je het aantal gevonden resultaten opvragen. Wanneer deze gelijk is aan nul zijn er dus geen resultaten gevonden. Je kan mysql_num_rows() ook in een variabele zetten en echo'en.

Nu we dit gecontroleerd hebben kunnen we de gegevens gaan weergeven. Dit kan op verschillende manieren. De manier is afhankelijk van de hoeveelheid gegevens die je wilt opvragen en hoe je ze wilt opvragen.


Één gegeven opvragen
Wanneer we maar één gegeven op willen halen maken we gebruik van mysql_result(). Als voorbeeld willen we de achternaam van de tweede gebruiker (tweede rij) in de tabel.

PHP
Code: Alles selecteren
<?php
$sql 
= "SELECT * FROM `contacten`";
$query = mysql_query( $sql ) or die( mysql_error() );
$result = mysql_result( $query, 1, "achternaam" );
// of: $result = mysql_result( $query, 1, 1 );
 
echo $result
;
?>

Zoals je ziet heeft de functies 3 parameters. De eerste is de query, de tweede is de rij in de tabel (beginnend bij nul) en de derde (optionele) parameter is de naam van de kolom. Je kan ook cijfers gebruiken.


Meerdere gegevens opvragen
Het kan zijn dat we niet 1 gegeven op willen vragen maar alle gegevens van de hele tabel. Dan gebruiken we één van de mysql_fetch_...() functies. Fetchen betekent letterlijk ophalen. Eerst ga ik bespreken hoe je de gegevens op kan halen en vervolgens het verschil tussen de verschillende mysql_fetch_...() functies.

We willen graag alle gegevens van onze tabel contacten weergeven. Dat doen we als volgt:

PHP
Code: Alles selecteren
<?php
$sql 
= "SELECT * FROM `contacten`";
$query = mysql_query( $sql ) or die( mysql_error() );
 
// Controleren of er resultaten zijn:
if( mysql_num_rows( $query ) == 0 )
{
   echo "De tabel is leeg.";
}
else
{
   // While maken
   while( $uitvoer = mysql_fetch_assoc( $query ) )
   {
      echo $uitvoer['voornaam'] . ' ' . $uitvoer['achternaam'] . ' woont in ' . $uitvoer['woonplaats'] . '<br />';
   }
}
?>

Dit zal als resultaat hebben:

Ronald Jansen woont in Amsterdam
Dora Peters woont in Rotterdam
Ellen Jansen woont in Utrecht

Je ziet dat we gebruik maken van een while. Deze while blijft lopen zolang de statement tussen de haakjes TRUE is. Dus zolang hij kan fetchen (zolang er rijen in de database staan) blijft hij lopen. Zodra de rijen op zijn zal de functie FALSE returnen waardoor de WHILE zal stoppen.

Je kan ook zonder de while werken, dan vraag je één enkele rij op. De volgende keer dat je de fetch dan weer gebruikt wordt de volgende rij opgevraagd.

Verschil tussen de mysql_fetch_...() functies

Nu gaan we de verschillende functies voor fetchen bespreken. We hebben er vier, te weten:

  • mysql_fetch_row(): geeft een numerieke array terug.
  • mysql_fetch_assoc(): geeft een associatieve array terug.
  • mysql_fetch_array(): geeft een numerieke en associatieve array terug.
  • mysql_fetch_object(): geeft de gegevens als object terug.
Om het te verduidelijken voeren we de volgende code uit:

PHP
Code: Alles selecteren
<?php
$sql 
= "SELECT * FROM `contacten` WHERE `id`='1'";
$query = mysql_query( $sql ) or die( mysql_error() );
 
$result 
= mysql_fetch_...( $query );
 
echo 
"<pre>";
print_r( $result );
echo "</pre>";
?>

Hierdoor krijg je:

Code: Alles selecteren
_row
Array
(
    [0] => 1
    
[1] => Jansen
    
[2] => Ronald
    
[3] => Amsterdam
)

_assoc
Array
(
    [id] => 1
    
[achternaam] => Jansen
    
[voornaam] => Ronald
    
[woonplaats] => Amsterdam
)

_array
Array
(
    [0] => 1
    
[id] => 1
    
[1] => Jansen
    
[achternaam] => Jansen
    
[2] => Ronald
    
[voornaam] => Ronald
    
[3] => Amsterdam
    
[woonplaats] => Amsterdam
)

_object
$result
->id = "1"
$result->achtenaam = "Jansen"
$result->voornaam = "Ronald"
$result->woonplaats = "Amsterdam" 

Tenslotte wil ik nog even de functies mysql_fetch_array() en mysql_fetch_object() bespreken. Deze hebben namelijk nog een tweede parameter. Je kunt namelijk nog een result_type toevoegen. Daarmee geef je aan hoe je de resultaten willen hebben. Dit geef je aan doormiddel van een constante:

  • MYSQL_ASSOC: associatief.
  • MYSQL_NUM: numeriek.
  • MYSQL_BOTH: numriek en associatief.
Wanneer we dit toepassen op mysql_fetch_array() dan kunnen we concluderen dat:

  • mysql_fetch_array( $query, MYSQL_ASSOC ) gelijk is aan mysql_fetch_assoc( $query )
  • mysql_fetch_array( $query, MYSQL_NUM ) gelijk is aan mysql_fetch_row( $query )
Bij mysql_fetch_object() zit het verschil in de waarde na de ->. Dit kan dus numeriek, associatief of beiden zijn, afhankelijk van de result_type.
Theo
Oprichter
 
Berichten: 1795
Geregistreerd: 11 Jun 2005 17:43
Woonplaats: in_array()

Terug naar SQL



Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast


cron