2011-12-23 27 views
12

Tôi đang lưu dữ liệu trong cơ sở dữ liệu mysql. Dữ liệu này là một mảng và nội dung là dữ liệu khác nhau của người dùng hiện tại đã đăng nhập vào hệ thống của tôi.Ngắt chuỗi được nối tiếp khi truy xuất từ ​​cơ sở dữ liệu

Tôi làm điều này khi tôi lưu vào cơ sở dữ liệu:

$data = addslashes(serialize($array)); 

sau đó

"UPDATE or INSERT INTO TABLE SET ... data = '$data';" 

Bây giờ, dữ liệu sẽ được lưu một cách chính xác kể từ khi chèn hoặc cập nhật lệnh return hợp lệ từ mã php của tôi.

Vấn đề của tôi là khi tôi cố gắng hủy tuần tự hóa, nó trả về false và thông báo được hiển thị trên trang của tôi.

Tôi đang làm gì sai?

+0

Bạn có thể đăng mã bạn sử dụng để unserialize dữ liệu và lỗi bạn đang nhận được không. – Nonym

+0

Thông báo nói gì? –

Trả lời

23

Tôi sẽ đặt cược trường trong cơ sở dữ liệu mysql của bạn không đủ lớn để lưu tất cả các ký tự. Đó là lý do tại sao, khi bạn un-serialize nó, bạn nhận được một thông báo và không có gì trong trở lại.

Cố gắng tăng trường để một MEDIUMBLOB hoặc MEDIUMTEXT (chiều dài tối đa 16.777.215) hoặc LONGBLOB hoặc LONGTEXT (chiều dài tối đa của 4294967295) như thế này:

ALTER TABLE your_table MODIFY COLUMN column_name MEDIUMTEXT /* other properties*/; 

Và cố gắng tiết kiệm và đọc dữ liệu của bạn một lần nữa.

Bây giờ, nếu dữ liệu của bạn trên 4,294,967,295 (là LONGBLOB hoặc LONGTEXT), có thể bạn nên kiểm tra loại dữ liệu bạn lưu và có thể lọc hoặc xóa một số dữ liệu không mong muốn.

0

Sau khi bạn nhận được dữ liệu từ bảng, bạn có đang xóa các dấu gạch chéo trước hàm unserialize hay không.

Thử chèn không có addslashes() và thêm dấu gạch chéo trước khi được đưa vào mảng.

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