Hàm serialize() trong PHP

Hàm serialize() trong PHP
Hàm serialize() trong PHP

Chức năng của Hàm serialize() trong PHP

Hàm serialize() trong PHP dùng để chuyển một biến chứa các dữ liệu: mảng, đối tượng, số nguyên, chuỗi,... thành chuỗi ký tự nhằm mục đích lưu chuỗi ký tự đó vào database, file, mạng,... sau đó dùng hàm unserialize để khôi phục lại.

Cú pháp của Hàm serialize() trong PHP

$chuỗi_ký_tự = serialize($biến_dữ_liệu);

$biến_dữ_liệu: Biến chứa dữ liệu.

$chuỗi_ký_tự: Kết quả trả về chuỗi ký tự.

Code Hàm serialize() trong PHP

<h2>Hàm serialize() Biến mảng thành chuỗi ký tự</h2>
<?php 
$mang = array("Vân","Lực","Quỳnh","Dung","Hạ");
echo $chuoimoi = serialize($mang)."<br>"; // Kết quả: a:5:{i:0;s:4:"Vân";i:1;s:5:"Lực";i:2;s:7:"Quỳnh";i:3;s:4:"Dung";i:4;s:4:"Hạ";}

// Dùng unserialize biến chuỗi ký tự lại thành mảng
$mangmoi =  unserialize($chuoimoi);
print_r($mangmoi); // Kết quả: Array ( [0] => Vân [1] => Lực [2] => Quỳnh [3] => Dung [4] => Hạ )
echo "<br>";
?>

<h2>Hàm serialize() Biến đối tượng thành chuỗi ký tự</h2>
<?php 
$nhanVien = (object) [
    'ten' => 'Bùi Tấn Lực',
    'tuoi' => '35'
];
echo $chuoimoi = serialize($nhanVien)."<br>"; // Kết quả: O:8:"stdClass":2:{s:3:"ten";s:16:"Bùi Tấn Lực";s:4:"tuoi";s:2:"35";}

// Dùng unserialize biến chuỗi ký tự lại thành đối tượng
$doituongmoi =  unserialize($chuoimoi);
print_r($doituongmoi); // Kết quả: Array ( [0] => Vân [1] => Lực [2] => Quỳnh [3] => Dung [4] => Hạ )
echo "<br>";
?>

<h2>Hàm serialize() Chuyển biến số nguyên thành chuỗi ký tự</h2>
<?php 
$bienso = 35;
echo $chuoimoi = serialize($bienso)."<br>"; // Kết quả: i:35;

// Dùng unserialize biến chuỗi ký tự lại thành số nguyên
echo $bienso =  unserialize($chuoimoi); // Kết quả: 35
?>

Kết quả:

/////Hàm serialize() Biến mảng thành chuỗi ký tự
a:5:{i:0;s:4:"Vân";i:1;s:5:"Lực";i:2;s:7:"Quỳnh";i:3;s:4:"Dung";i:4;s:4:"Hạ";}
Array ( [0] => Vân [1] => Lực [2] => Quỳnh [3] => Dung [4] => Hạ )

/////Hàm serialize() Biến đối tượng thành chuỗi ký tự
O:8:"stdClass":2:{s:3:"ten";s:16:"Bùi Tấn Lực";s:4:"tuoi";s:2:"35";}
stdClass Object ( [ten] => Bùi Tấn Lực [tuoi] => 35 )

/////Hàm serialize() Chuyển biến số nguyên thành chuỗi ký tự
i:35;
35

Chạy Thử

Những lưu ý khi sử dụng hàm serialize() trong PHP

serialize() giúp chuyển dữ liệu PHP thành chuỗi để thuận tiện lưu trữ hoặc truyền đi. Tuy nhiên, việc sử dụng hàm này cần đúng mục đích, đặc biệt khi dữ liệu được lưu trong cơ sở dữ liệu hoặc có thể đến từ nguồn bên ngoài. Một cách sử dụng hợp lý sẽ giúp hạn chế dữ liệu không cần thiết và tránh phát sinh vấn đề khi xử lý lại bằng unserialize().

Không nên serialize dữ liệu không cần thiết

Không phải dữ liệu nào trong PHP cũng cần chuyển sang chuỗi bằng serialize(). Nếu chỉ lưu một giá trị đơn giản như chuỗi, số hoặc trạng thái, việc serialize có thể khiến dữ liệu trở nên khó đọc và khó xử lý hơn.

Hàm này phù hợp hơn khi cần lưu một cấu trúc dữ liệu có nhiều thành phần như mảng hoặc đối tượng. Trước khi sử dụng, nên xác định rõ dữ liệu có cần giữ nguyên cấu trúc PHP hay không.

  • Chỉ serialize khi cần bảo toàn cấu trúc dữ liệu.
  • Không nên serialize các giá trị đơn giản nếu có thể lưu trực tiếp.
  • Hạn chế lưu dữ liệu dư thừa vì chuỗi kết quả có thể lớn hơn dữ liệu ban đầu.

Lưu ý khi lưu chuỗi serialize() vào cơ sở dữ liệu

Chuỗi được tạo bởi serialize() có thể chứa nhiều ký tự đặc biệt và thông tin về kiểu dữ liệu. Khi lưu vào cơ sở dữ liệu, cần chọn kiểu cột phù hợp với kích thước dữ liệu thực tế, đồng thời sử dụng cơ chế truy vấn có tham số để tránh lỗi khi thao tác với dữ liệu.

Không nên xem chuỗi serialize là dữ liệu có thể dễ dàng đọc hoặc truy vấn như các cột thông thường. Nếu cần tìm kiếm, lọc hoặc thống kê từng giá trị bên trong, việc tách dữ liệu thành các trường riêng thường dễ quản lý hơn.

Một điểm khác cần lưu ý là dữ liệu serialize phụ thuộc vào cấu trúc dữ liệu tại thời điểm tạo. Khi cấu trúc mảng hoặc lớp thay đổi trong quá trình phát triển website, dữ liệu cũ có thể cần được xử lý lại để tương thích với phiên bản mới.

Kiểm tra dữ liệu trước khi unserialize()

Đây là lưu ý quan trọng nhất khi dữ liệu được đưa vào unserialize(). Không nên tùy tiện khôi phục một chuỗi đến từ người dùng, URL, cookie, request hoặc nguồn dữ liệu không đáng tin cậy.

Nếu ứng dụng cần xử lý dữ liệu serialize từ bên ngoài, nên kiểm tra nguồn dữ liệu, xác thực dữ liệu và giới hạn những kiểu dữ liệu được phép khôi phục. Đặc biệt, không nên coi việc chuỗi có định dạng giống dữ liệu serialize là bằng chứng cho thấy nó an toàn.

Với dữ liệu chỉ do chính ứng dụng tạo và kiểm soát, việc serialize rồi lưu trữ sẽ dễ quản lý hơn. Ngược lại, dữ liệu có nguồn gốc không đáng tin cậy cần được kiểm soát chặt chẽ trước khi đưa vào quá trình khôi phục.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Hàm serialize() trong PHP.

  • 0 Bình luận
Trần Thị Vân | Content Creator Web Mới
Trần Thị Vân
Trần Thị Vân là Content Creator tại Web Mới, phụ trách nghiên cứu, biên soạn nội dung và chia sẻ kiến thức về website, SEO, lập trình cùng các xu hướng công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Hàm serialize() trong PHP
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !