MSSQL Zugriff unter Debian Etch mit unixODBC und FreeTDS

Posted on the April 2nd, 2007 under allgemein by matthias

Wer von unixoiden Systemen auf Datenbanksysteme in der Windows Welt zugreifen wollte, hatte es bisher oft nicht leicht. PHP wollte mit ODBC Support häufig selbst kompiliert werden, Pakete für FreeTDS oder unixODBC waren auch nicht immer vorhanden und dann folgte nach die Konfiguration selbst. Unter Debian Etch ist dies alles kein Problem mehr.

Wer bereits einen Webserver + PHP installiert hat, muss nur noch folgende Pakete installieren:

[sourcecode language="css"]aptitude install php5-odbc unixodbc tdsodbc[/sourcecode]

PHP4 Benutzer sollten hier natürlich analog das php4-odbc Paket installieren. Dieses bringt das von PHP benötigte ODBC Modul mit. unixODBC ist eine Open Source Implementation der unter Windows sehr populären ODBC API. Bei FreeTDS handelt es sich um die freie Implementation des TDS Protokolls, welches von Sybase ASE oder Microsoft SQL Server genutzt wird.

Nach der Installation findet man unterhalb von /etc die unixODBC Konfigurationsdateien odbc.ini und odbcinst.ini. In der odbcinst.ini muss nun die Verknüpfung zur FreeTDS Library angegeben werden. Somit könnte diese Datei wie folgt aussehen:

[sourcecode language="css"][FreeTDS]
Description = MSSQL DB
Driver = /usr/lib/odbc/libtdsodbc.so
UsageCount = 1[/sourcecode]

Die benötigten Daten für die Datasources (DSN) können nun unter /etc/odbc.ini eingetragen werden.

[sourcecode language="css"][MeinMSSQLServer]
Driver = FreeTDS
Description = MSSQL Test
Trace = Yes
TraceFile = /tmp/sql.log
ForceTrace = yes
Server = 11.11.11.11
Port = 1433
Database = DatabaseName[/sourcecode]

MeinMSSQLServer ist in diesem Fall der Name der erzeugten DSN. Mit der Trace Option wird ein Logfile an der mit TraceFile angegebenen Position erstellt. Nun kann man bereits die Verbindung mit dem von unixODBC mitgelieferten Tool isql testen. Der Aufruf von isql ist denkbar einfach:

[sourcecode language="css"]isql DSN username password[/sourcecode]

also z.B.:

[sourcecode language="css"]isql MeinMSSQLServer sa geheim
+—————————————+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+—————————————+
SQL>[/sourcecode]

Schon erhält man einen simplen Abfrageeditor, in dem man Abfragen in der angegeben DSN ausführen kann. Sollte hier eine Fehlermeldung auftreten, müssen die gemachten Einstellungen nochmal überprüft werden. Ansonsten wird der Zugriff auf die ODBC Verbindung auch über PHP fehlschlagen.

Damit man mittels PHP auf die eben erstellte ODBC Verbindung zugreifen kann, muss vorher überprüft werden, ob das PHP ODBC Modul geladen wurde. Dieses erfährt man anhand der Datei /etc/php5/conf.d/odbc.ini mit dem Inhalt:

[sourcecode language="css"]# configuration for php ODBC module
extension=odbc.so[/sourcecode]

Ein Neustart des Webservers und schon ist der PHP ODBC Support aktiviert. Nun noch ein einfaches Testskript schreiben, welches die Verbindung testet. Dieses Beispielskript muss natürlich der jeweiligen Datenbankstruktur angepasst werden:

[sourcecode language="css"]<?php
$connect = odbc_connect("MeinMSSQLServer", "sa", "geheim");

$query = "SELECT * FROM TestTabelle";

$result = odbc_exec($connect, $query);

while(odbc_fetch_row($result)) {
$field1 = odbc_result($result, 1);
$field2 = odbc_result($result, 2);
echo $field1;
echo $field2;
}

odbc_close($connect);
?>[/sourcecode]

Sollte nun eine Ausgabe der Daten aus der MSSQL Datenbank erscheinen, hat alles geklappt und man kann seine PHP Skripts problemlos auf einen Linuxserver umziehen lassen.

Links:

FreeTDS Userguide
FreeTDS Homepage
unixODBC Dokumentation
unixODBC Homepage

|

5 Responses to 'MSSQL Zugriff unter Debian Etch mit unixODBC und FreeTDS'

  1. 18. June 2009 at 16:47
    Cyborax
  2. 14. October 2009 at 19:18
    Thoralf
  3. 14. October 2009 at 19:32
    Thoralf
  4. 26. November 2009 at 16:09
    Flo
  5. 19. April 2011 at 15:02
    Alex

Leave a Reply




XHTML::
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>