Tôi đang sử dụng kết nối ODBC để truy xuất dữ liệu trên Windows Server. Sau khi nâng cấp PHP từ 5,4 đến 5,6 (cũng như trên 5,5) tất cả các trường varchar dường như trả về bộ nhớ ngẫu nhiên chưa được khởi tạo, mặc dù độ dài chuỗi không khớp với trường của trường được truy vấn.PHP odbc_result() dường như đang trả về bộ nhớ ngẫu nhiên chưa được khởi tạo cho các trường varchar trong 5.5+; mã giống hệt nhau hoạt động trong 5.4
Ví dụ, một truy vấn trả về chuỗi "Test.txt" trong 5.4 trở về sau trong 5.5+:
Tôi đã so php.ini
xác lập cá nhân giữa hai phiên bản và họ dường như giống hệt nhau về những gì đang được cụ thể liên quan đến bộ ký tự và cài đặt ODBC.
Tôi có thể chạy cả hai phiên bản cạnh nhau trên cùng một tài nguyên ODBC cùng một lúc và nhận được các kết quả này. Các trường không phải là varchar như ngày tháng và số nguyên đang in chính xác. Tôi chỉ đơn giản chạy chuỗi x86 an toàn thực thi php.exe
được tải xuống từ http://windows.php.net/download cho 5.4, 5.5 và 5.6.
Tôi có thể định cấu hình gì khác để thử và giải quyết vấn đề này?
Edit: Tôi đang sử dụng các chức năng ODBC Unified như vậy:
$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);
}
Bạn có thể thêm mã mà bạn kết nối với cơ sở dữ liệu, bao gồm chuỗi kết nối (ngoại trừ mật khẩu) hay không và liệu bạn có sử dụng chức năng 'PDO',' mysqli_' hay không (chức năng cấm) các hàm mysql_' – trincot
. Tôi chỉ đơn giản là sử dụng các hàm ODBC hợp nhất. –
'var_dump (bin2hex ($ theString))' để xem liệu có bất kỳ sự khác biệt nào trong dữ liệu nhận được từ cơ sở dữ liệu hay chỉ đơn thuần là trong cách nó được diễn giải sau đó. – deceze