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+:
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);
}
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
Połączenie wysłane . Używam tylko funkcji Unified ODBC. –
'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