SQL Select-Befehle mit PHP zu MS SQL Server via unixODBC und freeTDS

P

peterw

Grünschnabel
Hallo zusammen.
Ich komme nicht mehr weiter.
Hat jemand eine Idee?

Aufgabe:
PHP auf openSUSE 10.2 x86_64 soll Verbindung zu MS SQL Server 2000 aufnehmen.

Die Installation:
openSUSE 10.2 x86_64 ist eine Standardinstallation, keine GUI, nur Textmodus.

Dann openSUSE RPMs:
apache2 (v2.2.3)
apache2_mod_php5 (v5.2.0-10)
gcc (v4.1)

unixODBC gibts als openSUSE RPM aber libtdsodbc.so fehlt.
Deswegen selbst kompiliert (v2.2.14).
./configure --enable-gui=no
make
make install

Environmentvariable LD_LIBRARY_PATH gesetzt in /etc/profile.local.
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
export LD_LIBRARY_PATH

freeTDS selbst kompiliert (v0.82).
./configure --with-tdsver=8.0
make
make install

tds.driver Datei mit:
[FreeTDS]
Description = v0.82 with protocol v8.0
Driver = /usr/local/lib/libtdsodbc.so

Treiber installieren:
odbcinst -i -d -f tds.driver

tds.datasource-Datei mit:
[MSSQLServer]
Driver = FreeTDS
Description = Datenbank
Trace = No
Server = IP des SQL Servers
Port = 1433
Database = Datenbank

Installieren:
odbcinst -i -s -f tds.datasource

odbcinst -j liefert:
unixODBC 2.2.14
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

Verbindung zum SQL-Server auf der Konsole:
isql -v MSSQLServer user password
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+

select-Befehle hier sind ok.

Auch: Die Logs von unixODBC und freeTDS zeigen, dass alle Daten ankommen.

Bis hierher scheint es also ok zu sein.

Nun PHP.
Das php5-odbc-RPM von openSUSE installiert odbc.so.
odbc.so als Extension in php.ini eingetragen.
Apache restart: PHP-Skript bekommt keine Verbindung zum SQL-Server.

Also odbc.so neu kompiliert.
php5-devel und autoconf installiert.
openSUSE-RPM php.src (v5.2.0-10) installiert.
Bekomme php5-5.2.0.tar.bz2.
Auspacken.
Nach Unterordner ext/odbc.
phpize
./configure --with-unixODBC=shared,/usr/local
make

Im Unterordner modules ist nun odbc.so.
Nach /usr/lib64/php5/extensions kopiert.

Eintrag in der /etc/phph5/apache2/php.ini:
extension = odbc.so
apache restart.

2 PHP-Skripte geschrieben:
Skript1: select auf Tabelle mit 1 Datensatz: Liefert nichts.
Skript2: select auf Tabelle mit 10389 Datensätze: Liefert 10283 Datensätze.
D.h. die Ausgabe ist fehlerhaft.

Das gleiche Vorgehen auf openSUSE x86_32:
Skript1: select auf Tabelle mit 1 Datensatz: Liefert 1 Datensatz.
Skript2: select auf Tabelle mit 10389 Datensätze: Liefert 10389 Datensätze.
D.h. die Ausgabe ist korrekt.

isql auf der Konsole liefert immer noch korrekte Resultate.
Die Logs von unixODBC und freeTDS zeigen, dass alle Daten ankommen.

Fazit:
32 Bit scheint ok zu sein.
64 Bit scheint bis zu unixODBC und freeTDS ok zu sein. PHP ist nicht mehr ok.
Das gleiche Verhalten bei PHP 5.2.6 auf openSUSE 11.1.
Scheint also auch nicht mit einer neueren PHP-Version zusammenzuhängen.

Hat jemand eine Idee?
Vielen Dank.
 
Danke flugopa für die Antwort.

Der Default Port für den MS SQL Server 2000 ist 1433.
Mit 32 Bit openSUSE 10.2 bekomme ich ja mit dem Port 1433 eine Verbindung mit korrekten Resultaten.
Mit 64 Bit openSUSE 10.2 bekomme ich auf diesem Port eine Verbindung, allerdings mit fehlerhaften Resultaten

peterw
 
Zuletzt bearbeitet:

Ähnliche Themen

dovecot und postfix Konfiguration Problem

Falsche Rechte gesetzt beim Anlegen von Ordnern via Samba-Client

XFCE freezes at startup

Samba Update von 3.2.5 auf 3.5.6 - Probleme beim Server Browsen

HP PSC 2175 - CUPS druckt nicht

Zurück
Oben