2016-06-10 15 views
5

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+:

garbled

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); 
} 
+0

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

+0

. Tôi chỉ đơn giản là sử dụng các hàm ODBC hợp nhất. –

+0

'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

Trả lời

5

Có một số lỗi ở http://bugs.php.net liên quan đến dữ liệu chưa được khởi tạo xuất hiện trong kết quả chức năng odbc. Chúng chủ yếu dành cho các phiên bản cũ hơn (ví dụ: 5.3) của php. Điều đó dường như là những gì đang xảy ra trong trường hợp này, hoặc một số biến thể trong đó.

Chuyển sang PDO trong 5.6 đã giải quyết xong vấn đề cho tôi.

+0

Cảm ơn bạn đã upvotes - Tôi bị mất 100 do tiền thưởng :) –

Các vấn đề liên quan