Tutorials

ODBC, een inleiding

In inleiding in de combinatie ODBC en PHP

Pagina 1

Inleiding

Ga je met PHP met een database werken dan kom je als snel uit bij MySQL.
Echter je kan ook gebruik maken van een ODBC verbinding. ODBC is een soort object waarmee databases kunnen worden aangestuurd.
ODBC staat voor Open DataBase Connectivity. Het wordt standaard door Windows ondersteunt maar op sommige Linux systemen wordt een gelijk object aangeboden (bijvoorbeeld JDBC).
Met ODBC kan je o.a. de volgende databases benaderen:
  • [item]MS Access[/item]
    [item]MS Excel[/item]
    [item]MS SQL server[/item]
    [item]Op tekst gebaseerde databases[/item]

Welke je precies kan is afhankelijk van de geïnstalleerde drivers

Belangrijk: Om dit goed te begrijpen moet je enig ervaring hebben met MySQL databases.

In de voorbeelden werken we met een MS Access database genaamd boeken. Als je dit artikel download zit deze bijgesloten.
Pagina 2

ODBC op de test server

Ik ga er van uit dat je test server draait op Windows en dat je als database een MS Access database kiest.
Om gebruik te kunnen maken van de database moet je Windows vertellen waar de database staat.

Ga hiervoor naar het Configuratiescherm



Ga naar Systeembeheer



Open Gegevensbronnen (ODBC)



Ga naar het tabblad Systeem-DNS



Klik op toevoegen

Kies je type database, in ons geval Drive do Microsoft Access



Klik op Voltooien

Geef nu de naam op waarmee je de database wilt aanroepen en eventueel een beschrijving.



Kies selecteren en zoek de database op, klik op OK



Je komt weer terug in het vorige scherm. Klik hier op OK



Ik krijg de melding ongeldig pad
Sluit dan je database en je database programma. Nog niet verholpen? Controleer het pad dan.
Pagina 3

ODBC functies

Een aantal functies die je wel hebt bij MySQL zitten niet in ODBC (en andersom). Een lijst met alle ODBC functies staat hier http://nl3.php.net/manual/nl/ref.uodbc.php

Op moment van schrijven zijn er de volgende functies

Dikgedrukte functies hebben een vertaalde omschrijving.
  • [item]odbc_autocommit

    Toggle autocommit behaviour[/item]
    [item]odbc_binmode

    Handling of binary column data[/item]

    [item]odbc_close_all

    Sluit alle ODBC verbinding [/item]
    [item]odbc_close

    Sluit een ODBC verbinding [/item]
    [item]odbc_columnprivileges

    Returns a result identifier that can be used to fetch a list of columns and associated privileges[/item]

    [item]odbc_columns

    Lijst alle kollomen uit van een tabel. [/item]
    [item]odbc_commit

    Commit an ODBC transaction[/item]
    [item]odbc_connect

    Verbinden met een ODBC connectie [/item]

    [item]odbc_cursor

    Geeft cursor naam [/item]
    [item]odbc_data_source

    Geeft informatie over de connectie[/item]
    [item]odbc_do

    Zelfde als odbc_exec[/item]

    [item]odbc_error

    Geeft de laatste foutcode [/item]
    [item]odbc_errormsg

    Geeft de laatste fout [/item]
    [item]odbc_exec

    Voert een SQL commando uit [/item]

    [item]odbc_execute

    Execute a prepared statement[/item]
    [item]odbc_fetch_array

    Fetch resultaten naar een array [/item]
    [item]odbc_fetch_into

    Fetch one result row into array[/item]

    [item]odbc_fetch_object

    Fetch resultaten naar een object [/item]
    [item]odbc_fetch_row

    Fetch één rij [/item]
    [item]odbc_field_len

    Geeft de lengte van een veld[/item]

    [item]odbc_field_name

    Geeft de kolomnaam[/item]
    [item]odbc_field_num

    Geeft het kolomnummer[/item]
    [item]odbc_field_precision

    Zelfde als odbc_field_len [/item]

    [item]odbc_field_scale

    Get the scale of a field[/item]
    [item]odbc_field_type

    Geeft datatype van het veld [/item]
    [item]odbc_foreignkeys

    Returns a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table[/item]

    [item]odbc_free_result

    Free resources associated with a result[/item]
    [item]odbc_gettypeinfo

    Returns a result identifier containing information about data types supported by the data source.[/item]
    [item]odbc_longreadlen

    Handling of LONG columns[/item]

    [item]odbc_next_result

    Checks if multiple results are available[/item]
    [item]odbc_num_fields

    Number of columns in a result[/item]
    [item]odbc_num_rows

    Number of rows in a result[/item]

    [item]odbc_pconnect

    Open een persistent database connectie (blijft open na dat script afgelopen is) [/item]
    [item]odbc_prepare

    Prepares a statement for execution[/item]
    [item]odbc_primarykeys

    Returns a result identifier that can be used to fetch the column names that comprise the primary key for a table[/item]

    [item]odbc_procedurecolumns

    Retrieve information about parameters to procedures[/item]
    [item]odbc_procedures

    Get the list of procedures stored in a specific data source. Returns a result identifier containing the information.[/item]
    [item]odbc_result_all

    Weergeeft resultaten als HTML
    tabel[/item]

    [item]odbc_result

    Get result data[/item]
    [item]odbc_rollback

    Draait een transactie terug. [/item]
    [item]odbc_setoption

    Adjust ODBC settings. Returns FALSE if an error occurs, otherwise TRUE.[/item]

    [item]odbc_specialcolumns

    Returns either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction[/item]
    [item]odbc_statistics

    Geeft tabel
    statistieken[/item]
    [item]odbc_tableprivileges

    Lists tables and the privileges associated with each table[/item]
    [item]odbc_tables

    Get the list of table names stored in a specific data source. Returns a result identifier containing the information.[/item]
Pagina 4

ODBC op de server

Ondersteund jouw server ODBC (ook wel database koppelingen of database connecties genoemd). Dan kan je waarschijnlijk bij het Configuratiescherm > Systeembeheer > Gegevensbronnen. Toch kan je ze zelf meestal instellen via je beheer panel.

In dit geval betreft het een HELM panel, maar het werkt ongeveer hetzelfde in andere beheer panels.

Als eerst moet je de database op de server zetten. Meestal in de map db deze ligt buiten je wwwroot. Dit kan je doen via bijvoorbeeld FTP of webupload.


Meld je nu aan in HELM (als je dat nog niet gedaan hebt)



Kies voor domeinen



Kies het domein waarbij je de ODBC connectie wilt instellen



Klik op ODBC koppelingen



Klik op Voeg nieuw toe



Kies het type van de koppeling, in ons geval dus Microsoft Access en klik op Volgende



Voer een naam in en kies het bestand, klik hierna op bewaar.



Afhankelijk van de server kan het een tijdje duren voordat de alles is bewaard.
Pagina 5

meer...

Artikel op de website van de Webmakerij:
http://webmakerij.markei.nl/artikelen/odbc_php.php

Voorbeeld database:
http://webmakerij.markei.nl/artikelen/odbc_php_db01.mdb

Licentie:
GNU/GPL

Meer informatie over GNU/GPL licentie


Hier lees je ook over ODBC PHP
Pagina 6

Werken met ODBC en PHP

De MySQL functies en de ODBC functies van PHP lijken veel op elkaar. De belangrijkste:

odbc_connect & mysql_connect
Omschrijving Maak een verbinding met database
odbc_close & mysql_close
Omschrijving Sluit een verbinding
odbc_exec & mysql_query
Omschrijving Voer SQL query uit
odbc_fetch_object & mysql_fetch_object
Omschrijving Fetch resultaten naar een object



Code



<!doctype html public "-//W3C//DTD HTML 4.01//EN">

<html>

   <head>
      <title>ODBC test</title>
   </head>

   <body>
		<?php
		    // de verbinding tot stand brengen
			$connectie = odbc_connect('boeken','','');
			// controlleren of er een connectie is
			if (!$connectie)
			{
		 		exit("<pre>Er is een fout opgetreden tijdens het maken van de verbinding met de database.</pre>");
		 	}
			// schrijf je SQL query
			$sql = "SELECT * FROM auteurs";
			// voer de query uit
			$resultaat = odbc_exec($connectie,$sql);
			// controlleer of alles goed is verlopen
			if (!$resultaat)
			{
				exit("<pre>Fout tijdens het uitvoeren van de SQL query</pre>");
			}
			// opmaak voor resultaten
			echo "\t\t<table>\r\n";
			echo "\t\t\t<tr><th>Naam</th><th>Biografie</th></tr>\r\n";
			// fetch de resultaten
			while ($record = odbc_fetch_object($resultaat))
			{
			    echo "\t\t\t<tr><td>" . $record->naam . "</td><td>" . $record->biografie . "</td></tr>\r\n";
			}
			// opmaak voor resultaten
			echo "\t\t</table>\r\n";
			// sluit de verbinding
			odbc_close($connectie);
		?>
   </body>
</html>



Stap voor stap: de verbinding tot stand brengen
Het tot stand brengen van de verbinding gaat als volgt.
<?php
// de verbinding tot stand brengen
$connectie = odbc_connect('boeken','','');
// controlleren of er een connectie is
if (!$connectie)
{
exit("<pre>Er is een fout opgetreden tijdens het maken van de verbinding met de database.</pre>");
}
?>
We doen odbc_connect(naam van de verbinding, gebruikersnaam, wachtwoord). De velden gebruikersnaam en wachtwoord zul je niet vaak nodig hebben maar zijn wel verplicht. Laat deze dus gewoon leeg. Het resultaat zal FALSE zijn (de verbinding is dan mislukt) of het nummer van de connectie. De slaan we op in de variabelen $connectie.
Vervolgens controleren we of er een verbinding is (we controleren dus of $connectie == FALSE), zoniet dan stoppen we vanaf hier het script en weergeven nog een laatste tekst.
Krijg je een fout controleer dan eerst of je de database nog niet open hebt staan.

Stap voor stap: een query uitvoeren
We voeren nu de query uit:
<?php
// schrijf je SQL query
$sql = "SELECT * FROM auteurs";
// voer de query uit
$resultaat = odbc_exec($connectie,$sql);
// controlleer of alles goed is verlopen
if (!$resultaat)
{
exit("<pre>Fout tijdens het uitvoeren van de SQL query</pre>");
}
?>
Als eerste schrijven we de SQL code op en slaan we deze op in de variabelen SQL, dit is in principe niet nodig maar is wel zo duidelijk.
Vervolgens voeren we de code uit via odbc_exec(). Belangrijk is dat we hier eest het nummer van de verbinding geven en dan de query. Beide parameters zijn verplicht!
Indien de SQL code een fout bevat zal deze FALSE teruggeven anders resultaten. Dit slaan we op in $resultaten.
In de volgende stap controleren we of alles is goed gegaan (we controleren dus of $resultaat == FALSE). Iets mis? Dan stoppen we PHP en weergeven we nog een laatste bericht.

Stap voor stap: resultaten weergeven
Hier is maar één ding anders in vergelijking met MySQL. Het woordje odbc in plaats van mysql
<?php
// opmaak voor resultaten
echo "\t\t<table>\r\n";
echo "\t\t\t<tr><th>Naam</th><th>Biografie</th></tr>\r\n";
// fetch de resultaten
while ($record = odbc_fetch_object($resultaat))
{
echo "\t\t\t<tr><td>" . $record->naam . "</td><td>" . $record->biografie . "</td></tr>\r\n";
}
// opmaak voor resultaten
echo "\t\t</table>\r\n";
?>
We kiezen de voor om eerst de tabelkoppen weer te geven en dan met een while en fetch_object de resultaten in te voegen.
Uiteraard kan je ook van andere functies gebruikmaken zoals: odbc_fetch_row(), odbc_result(), odbc_fetch_array() en odbc_fetch_into()

Stap voor stap: de verbinding sluiten
Is niet verplicht maar wel aanbevolen en netjes de verbinding afsluiten
<?php
// sluit de verbinding
odbc_close($connectie);
?>
Er kan ook gebruik worden gemaakt van odbc_close_all(). Deze sluit alle verbindingen.

Reacties

0
Nog geen reacties.