2016-06-10 8 views
5

Używam połączenia ODBC do pobierania danych z serwera Windows. Po uaktualnieniu PHP z 5.4 do 5.6 (jak również w wersji 5.5) wszystkie pola varchar wydają się zwracać losową niezainicjowaną pamięć, chociaż długość łańcucha jest zgodna z polem zapytania.PHP odbc_result() wydaje się zwracać losową niezainicjowaną pamięć dla pól varchar w 5.5+; identyczny kod działający w 5.4

Na przykład, zapytanie powrocie ciąg „Test.txt” w 5,4 zwraca następujący w 5.5+:

garbled

Mam porównaniu moje php.ini ustawienia pomiędzy tymi dwoma wersjami i wydają się być identyczne pod względem tego, co jest ściśle związane z zestawami znaków i ustawieniami ODBC.

Mogę uruchamiać obie wersje obok siebie na tym samym źródle ODBC w tym samym czasie i uzyskać te wyniki. Pola inne niż varchar, takie jak daty i liczby całkowite, są drukowane poprawnie. Po prostu uruchamiam plik wykonywalny bezpiecznego wątku x86 php.exe pobrany z http://windows.php.net/download dla wersji 5.4, 5.5 i 5.6.

Co jeszcze mogę skonfigurować, aby spróbować rozwiązać ten problem?

Edit: Używam Unified funkcji ODBC tak:

$o = odbc_connect("Driver=MMODBC;Server=localhost;Database=odbc_mapping;", [user], [pass]); 
$r = odbc_exec($o, "SELECT * FROM Table"); 
while (odbc_fetch_row($r)) { 
    print odbc_result($r, 1); 
} 
+0

Czy możesz dodać kod, z którym łączysz się z bazą danych, w tym ciąg połączenia (z wyjątkiem hasła) i czy używasz funkcji 'PDO',' mysqli_' lub (god hous zakaz) 'mysql_' function – trincot

+0

Połączenie wysłane . Używam tylko funkcji Unified ODBC. –

+0

'var_dump (bin2hex ($ theString))', aby zobaczyć, czy jest jakaś różnica w danych otrzymanych z bazy danych, lub tylko w jaki sposób jest interpretowana po tym. – deceze

Odpowiedz

5

Istnieje kilka błędów w http://bugs.php.net związanych niezainicjowanych danych pojawiających się w wynikach odbc funkcji. Są one przeznaczone głównie dla starszych wersji (np. 5.3) php. Wygląda na to, co się dzieje w tym przypadku, lub jakiś jego wariant.

Przejście na PDO w wersji 5.6 całkowicie rozwiązało problem.

+0

Dzięki za przegrane - straciłem 100 dzięki bounty :) –

Powiązane problemy