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:

aptitude install php5-odbc unixodbc tdsodbc

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:

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

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

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

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:

isql DSN username password

also z.B.:

isql  MeinMSSQLServer sa geheim
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

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:

# configuration for php ODBC module
extension=odbc.so

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:

<?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);
?>

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

Related posts:

Twitter Post | Print Post

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

  1. Gravatar 18. June 2009 at 16:47
    Cyborax
  2. Gravatar 14. October 2009 at 19:18
    Thoralf
  3. Gravatar 14. October 2009 at 19:32
    Thoralf
  4. Gravatar 26. November 2009 at 16:09
    Flo

Leave a Reply




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