P H P  V I E T  N A M  P O R T A L
Xin chào, Khách. Vui lòng đăng nhập hoặc đăng ký tài khoản.
Bạn đã quên email kích hoạt?






     Trang chủ | Download | Tự học PHP | Kho tư liệu | Diễn đàn
Trang: [1]
  In  
This topic has not yet been rated!
You have not rated this topic. Select a rating:
Tác giảChủ đề: Xử lý mảng bytes với mysql và php  (Đã đọc 1831 lần)
tpphu
PHP Intermediate
*
Posts: 180

Trần Phong Phú

tpphu@yahoo.com tpphu
Xem hồ sơ WWW Email
« on: July 17, 2010, 12:33:40 AM »

Làm thế nào để lưu một mảng byte vào mysql?

Suốt một tuần vừa qua loay hoay mãi với vấn đề này, search, tìm kiếm, đọc, thử nghiệm và cuối cùng hiểu được một vài thông tin và chia sẽ với các bạn.

Nhưng trước tiên muốn làm rõ hai vấn đề này cái đã đó là hai hàm
Code:
pack & unpack
.

Nếu bạn gọi hàm
Code:
pack(‘l’,257)
thì kết quả trả về là gì? Không chắc có nhiều người biết về nó. Nếu trên windows (tôi không chắc trên hệ điều hành khác) tôi test được đó là một mảng
Code:
byte[4]{0x01,0x01,0x00,0x00};
. Và hàm unpack thì ngược lại. Chúng ta có thể xem mảng byte này như là một chuỗi và thực hiện phép toán cộng chuỗi như thông thường.

Nếu tới một lúc nào đó chúng ta muốn xử lý các file nhị phân, ví dụ hình ảnh thì chắc chắn chúng ta sẽ phải rất quan tâm tới hai hàm này. Và việc hiểu được hai hàm này là tối quan trọng. Lúc đó các bạn sẽ rất bối rối với các khái niệm mà hai hàm pack và unpack đưa ra. Nhưng sau khi tìm hiểu xong sẽ cảm thấy rất thú vị.

Quay trở lại với vấn đề, nếu giả sử bạn có mảng byte thì làm sao để lưu vào.
Bạn phải tổ chức kiểu dữ liệu của column đó là BINARY or VARBINARY, hoặc BLOB. Bạn muốn biết tụi chúng khác nhau thế nào thì đọc tai document của MySQL.

BINARY cho các mảng bé hơn 255 phần tử
VARBINARY thì cho mảng khoảng bé hơn 65k byte gì đó, không nhớ rõ.
BLOB thì dùng cho mấy cái gì đó rất lớn (kiểu như của một file)

Nếu như hàm insert là bình thường thì hàm select ra và xử lý dữ liệu trên nó khá là vất vả. thường thì chúng ta phải truyền vào một chuỗi format để unpack, hơi đuối, với lại chẳng có nhiều lập trình viên thích vậy. Vậy chúng ta phải làm sao để xem chúng như một FILE để có thể seek trên nó giống như thông thường.

Vậy thì chúng ta có thể convert nó thành một mảng byte, bằng hàm
Code:
unpack(‘C*’,$data_from_mysl);
sau đó bạn có thể thực hiện thao tác trên đó. Một điều quan trọng giả sử bạn lấy 4byte và muốn convert nó thành một số nguyên thì bạn phải chú ý thứ tự byte của nó lưu trữ thế nào, như ví dụ tôi vừa nói với bạn phía trên với bạn. Có thể bạn làm đúng trên máy ở nhà với windows nhưng lên server linux lại có vấn đề.

Chia sẽ kinh nghiệm này với các bạn.
Ngày cuối tuần vui nhé.
Logged

A member of NonIT Blog Bog - Be master without effort.
Trang: [1]
  In  
 
Chuyển sang:  

Powered by SMF 1.1.15 | SMF © 2006-2007, Simple Machines . Modified by PHPVN Members