ADOdb: een introductie

Info 
Door: Franky Braem Moeilijkheidsgraad: 3/3
Views:12.521Reacties: 0
  Log in om zelf te reageren
 Waardering:8/10 (2 stemmen)



De bedoeling van dit artikel is om je een introductie te geven over de ADOdb class library.

ADOdb is een database class library die de code afschermt van de specifieke PHP-functies van databases (zoals bv. mysql_connect). Wat gebeurt er als je van database moet veranderen? Als je de PHP functies gebruikt, dan zal je heel wat code moeten aanpassen. Gebruik je ADOdb, dan zal je enkel een configuratie moeten aanpassen. Zo gebruik ik thuis MySQL, terwijl mijn host op dotgeek.org PostgreSQL gebruikt. Had ik ADOdb niet gebruikt, dan was het onmogelijk geweest om dotgeek.org te gebruiken.

Installatie
Voor je begint aan de installatie, moet je volgende dingen doen of nakijken:

  • Je hebt minimum PHP4 versie 4.0.5 nodig. ADOdb werkt ook met PHP5.
  • Download de recentste versie van ADOdb.
  • Unzip de download in een directory.


Je kan de installatie op volgende manier testen:

#Code
1
2
3
4
5
6
// Indien nodig wijzig je het volgende naar de folder 
 // waar je de download geplaatst heb
 include('/adodb/adodb.inc.php');
 $db = ADONewConnection('mysql'); // Een nieuwe connectie naar een mysql database
 // Je moet zelf nog $host, $user, $pwd en $dbname ergens opvullen.
 $db->Connect($host, $user, $pwd, $dbname);


Met de functie ADONewConnection vertel je ADOdb welke database je gaat gebruiken.Bekijk de lijst van databases die door ADOdb gesupporteerd worden.

ADOdb in jouw scripts
Denk eerst tweemaal na voor je begint te coderen. Het voornaamste doel van ADOdb is om het jou gemakkelijk te maken om van database te veranderen. Het is dus niet aan te raden om de parameters die ADOdb nodigt heeft overal hard te coderen. Gebruik een configuratie bestand zoals dit:

#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$adodb_directory = '/adodb';
 
 $driver   = 'mysql';
 $host     = 'localhost';
 $pwd      = 'secret';
 $username = 'ikke';
 $dbname   = 'mijndb';
 
 include($adodb_directory . '/adodb.inc.php');
 
 class DB
 {
   function get_db()
   {
     static $db;
     
     if ( ! isset($db) )               
     {
       $db = ADONewConnection($driver);
       $db->Connect($host, $username, $pwd, $dbname);
     }
     return $db;
   }
 }


Gegevens selecteren
Er zijn verschillende manieren om gegevens uit een database te halen.

#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$db = DB::get_db();

  $sql = 'SELECT familienaam, voornaam FROM gebruikers';
  $rs = $db->Execute($sql);
  if ( $rs )
  {
    while ( ! $rs->EOF )
    {
      echo 'Familienaam: ' . $rs->fields[0] . '<br />';
      echo 'Voornaam   : ' . $rs->fields[1];
      $rs->MoveNext();
    }
  }
  else
  {
    echo $db->ErrorMsg();
  }


In dit voorbeeld is $rs->fields een array die de waarden bevat van de huidige rij. De index is standaard numerisch, maar je kan ook een associatieve array gebruiken door de mode te wijzigen vooraleer Execute uit te voeren.

#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$db = DB::get_db();
  $db->SetFetchMode(ADODB_FETCH_ASSOC);

  $sql = 'SELECT familienaam, voornaam FROM gebruikers';
  $rs = $db->Execute($sql);
  if ( $rs )
  {
    while ( ! $rs->EOF )
    {
      echo 'Familienaam: ' . $rs->fields['familienaam'] . '<br />';
      echo 'Voornaam   : ' . $rs->fields['voornaam'];
      $rs->MoveNext();
    }
  }
  else
  {
    echo $db->ErrorMsg();
  }


Een andere mogelijkheid is om iedere rij voor te stellen als een object. Je kan de methode FetchNextObject gebruiken hiervoor.

Je kan ook de methode FetchRow gebruiken:

#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$db = DB::get_db();
  $db->SetFetchMode(ADODB_FETCH_ASSOC);

  $sql = 'SELECT familienaam, voornaam FROM gebruikers';
  $rs = $db->Execute($sql);
  if ( $rs )
  {
    while ( $row = $rs->FetchRow() )
    {
      echo 'Familienaam: ' . $row['familienaam'] . '<br />';
      echo 'Voornaam   : ' . $row['voornaam'];
    }
  }
  else
  {
    echo $db->ErrorMsg();
  }



Parameters
Iedereen weet dat je bij het samenstellen van een SQL-query moet opletten voor quotes. Het probleem is dat elke database een andere manier gebruikt om quotes in een query te plaatsen. Ook hier maakt ADOdb het voor de ontwikkelaar eenvoudiger met de methode qstr.

Een voorbeeldje:

#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$db = DB::get_db();
  $db->SetFetchMode(ADODB_FETCH_ASSOC);

  $nickname = $db->qstr($_POST['nickname'], get_magic_quotes_gpc());
  $sql = "SELECT familienaam, voornaam FROM gebruikers WHERE nickname = '$nickname'";
  $rs = $db->Execute($sql);
  if ( $rs )
  {
    while ( $row = $rs->FetchRow() )
    {
      echo 'Familienaam: ' . $row['familienaam'] . '<br />';
      echo 'Voornaam   : ' . $row['voornaam'];
    }
  }
  else
  {
    echo $db->ErrorMsg();
  }


Het kan nog eenvoudiger. Door parameters door te geven in de Execute methode. Daar waar je een variabele nodig hebt, plaats je een ?. Al de nodige parameters worden in een array geplaatst.
Wanneer het nodig is, zal ADOdb zelf quotes toevoegen.

#Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$db = DB::get_db();
  $db->SetFetchMode(ADODB_FETCH_ASSOC);

  $sql = "SELECT familienaam, voornaam FROM gebruikers WHERE nickname = ?";
  $params = array($_POST['nickname']);
  $rs = $db->Execute($sql, params);
  if ( $rs )
  {
    while ( $row = $rs->FetchRow() )
    {
      echo 'Familienaam: ' . $row['familienaam'] . '<br />';
      echo 'Voornaam   : ' . $row['voornaam'];
    }
  }
  else
  {
    echo $db->ErrorMsg();
  }


Gegevens wijzigen of toevoegen
UPDATE en INSERT werken op dezelfde manier als SELECT.

#Code
1
2
3
4
5
6
7
8
9
$db = DB::get_db();

  $sql = "INSERT INTO gebruikers (familienaam, voornaam) VALUES (?, ?)";
  $params = array($_POST['familienaam'], $_POST['voornaam']);
  $rs = $db->Execute($sql, params);
  if ( ! $rs )
  {
    echo $db->ErrorMsg();
  }

Nog geen reacties

Om te reageren moet je ingelogd zijn.
Nog niet geregistreerd? Doe dat dan nu!


Terug naar gewone pagina

Websitemaken wordt gehost door Nucleus.be, uw Hosting Solution Builder