Ostatnio przeniosłem jeden z serwisów na świeżo zainstalowanego Debiana Lenny i mam kłopot z komunikacją php5-mssql. Skrypty, które wcześniej bezboleśnie działały na Suse teraz wyświetlają błędy. Znalazłem, że pomaga zmiana wersji w konfiguracji freetds, zmieniłem w:
Kod: Zaznacz cały
/etc/freetds/freetds.conf
A teraz prawdziwy problem: Dokładnie ten sam skrypt uruchomiony z crona (na tym samym użytkowniku), albo przez apache dalej wyświetla błędy - tak jakby ignorował ustawienia. Sprawdziłem programem strace - cron czyta prawidłowo plik
Kod: Zaznacz cały
/etc/freetds/freetds.conf
System chodzi na Debianie 5.0.4, apache2, php5, php5-sybase zainstalowane z paczek. Komunikacja z MSSQL przez standardowe funkcje (mssql_connect itd.).
Wyświetlany błąd:
Kod: Zaznacz cały
The multi-part identifier "tabela.pole" could not be bound
Dodane dla potomnych:
Problem polegał na domyślnym ustawianiu ,,locale ISO-8859-1''. Skrypt uruchamiany ręcznie z powłoki pobierał ustawienia ze środowiska, a skrypt odpalany przez apache, albo z crona - nie. Ustawienie locale na UTF-8 w pliku konfiguracyjnym freetds.conf rozwiązało problem.
W rozwiązywaniu problemu pomocne były ,,debug logi'' z freetdsa (TDSDEBUG).