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:
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.
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.
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.
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.
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
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
- [item]Human readble versie van GNU GPL licentie (via CreativeCommons) - http://creativecommons.org/licenses/GPL/2.0/[/item][item]Juridische versie van GNU GPL licentie (Engels) - http://www.gnu.org/licenses/gpl.txt[/item][item]Niet officele juridische versie van GNU GPL licentie (Nederlands) - http://users.skynet.be/xterm/gpld.txt[/item][item]GNU website - http://www.gnu.org/[/item][item]CreativeCommons website - http://creativecommons.org/[/item]
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
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.
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