BLOB (Binary Large Object) হলো একটি ডেটা টাইপ যা খুব বড় বাইনারি ডেটা যেমন ইমেজ, অডিও, ভিডিও, অথবা অন্য কোনো বাইনারি ফাইল সংরক্ষণ করতে ব্যবহৃত হয়। MySQL তে BLOB ডেটা টাইপটি TINYBLOB, BLOB, MEDIUMBLOB, এবং LONGBLOB নামে বিভক্ত করা হয়েছে, যা বিভিন্ন আকারের বাইনারি ডেটা ধারণ করতে সক্ষম।
MySQLi ব্যবহার করে BLOB ডেটা ইনসার্ট, আপডেট, রিড, এবং ডিলিট করা সম্ভব। PHP এ BLOB হ্যান্ডলিং করতে mysqli এক্সটেনশন ব্যবহার করা হয়।
1. BLOB এর ধরন
MySQL তে BLOB এর প্রধান ধরনগুলো হলো:
- TINYBLOB: 255 বাইট পর্যন্ত বাইনারি ডেটা।
- BLOB: 65,535 বাইট (64 KB) পর্যন্ত বাইনারি ডেটা।
- MEDIUMBLOB: 16,777,215 বাইট (16 MB) পর্যন্ত বাইনারি ডেটা।
- LONGBLOB: 4,294,967,295 বাইট (4 GB) পর্যন্ত বাইনারি ডেটা।
2. BLOB ডেটা ইনসার্ট করা
BLOB ডেটা ইনসার্ট করার জন্য, সাধারণত Prepared Statements ব্যবহার করা হয়, যাতে ডেটা সুরক্ষিতভাবে ডাটাবেসে ইনসার্ট করা যায়।
উদাহরণ:
ধরা যাক, আমাদের একটি টেবিল রয়েছে যার মধ্যে একটি BLOB কলাম আছে এবং আমরা একটি ইমেজ ফাইল ডাটাবেসে ইনসার্ট করতে চাই।
<?php
// MySQLi দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// ফাইল পাথ
$file = 'path_to_image.jpg';
// ফাইল কনটেন্ট পড়া
$fileContent = file_get_contents($file);
// Prepared statement ব্যবহার করে BLOB ডেটা ইনসার্ট করা
$stmt = $conn->prepare("INSERT INTO images (image_data) VALUES (?)");
$stmt->bind_param("s", $fileContent); // 's' মানে স্ট্রিং, কিন্তু এখানে বাইনারি ডেটা তাই এটি স্টোর করার জন্য 's' ব্যবহার করা হয়েছে।
$stmt->execute();
if ($stmt->affected_rows > 0) {
echo "Image inserted successfully!";
} else {
echo "Error inserting image!";
}
$stmt->close();
mysqli_close($conn);
?>
ব্যাখ্যা:
- file_get_contents() ফাংশন ব্যবহার করে ইমেজ ফাইলের বাইনারি ডেটা পড়া হচ্ছে।
- bind_param() ফাংশন ব্যবহার করে বাইনারি ডেটাকে Prepared Statement এর মধ্যে সন্নিবেশ করা হচ্ছে। এখানে
's'প্যারামিটার টাইপ ব্যবহৃত হচ্ছে, যা স্ট্রিং হিসাবে বাইনারি ডেটা পাঠাতে সক্ষম। - এরপর execute() ফাংশনটি ব্যবহার করে ডেটা ডাটাবেসে ইনসার্ট করা হচ্ছে।
3. BLOB ডেটা রিড করা (Select Operation)
BLOB ডেটা রিড করতে, mysqli_fetch_assoc() অথবা mysqli_fetch_array() ফাংশন ব্যবহার করা হয়। এটি ডাটাবেস থেকে BLOB ডেটাকে PHP ভেরিয়েবলে নিয়ে আসে এবং সেখান থেকে এটি প্রোসেস করা যেতে পারে।
উদাহরণ:
<?php
// MySQLi দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// BLOB ডেটা রিড করা
$sql = "SELECT image_data FROM images WHERE id = 1";
$result = mysqli_query($conn, $sql);
if ($row = mysqli_fetch_assoc($result)) {
// BLOB ডেটা এক্সট্র্যাক্ট করা
$imageData = $row['image_data'];
// ইমেজ হেডার সেট করা
header("Content-type: image/jpeg");
echo $imageData;
} else {
echo "No image found!";
}
mysqli_close($conn);
?>
ব্যাখ্যা:
- SELECT স্টেটমেন্ট দিয়ে ডাটাবেস থেকে BLOB ডেটা (এখানে একটি ইমেজ) সংগ্রহ করা হচ্ছে।
- mysqli_fetch_assoc() ফাংশন ব্যবহার করে সেই ডেটাকে
$rowঅ্যারেতে সন্নিবেশ করা হচ্ছে। - header() ফাংশন ব্যবহার করে ইমেজটির কনটেন্ট টাইপ নির্ধারণ করা হচ্ছে, যাতে ব্রাউজারে সঠিকভাবে ইমেজটি প্রদর্শিত হয়।
- অবশেষে, echo করে ইমেজটি ব্রাউজারে প্রিন্ট করা হচ্ছে।
4. BLOB ডেটা আপডেট করা
BLOB ডেটা আপডেট করার সময়, একইভাবে Prepared Statements ব্যবহার করা হয়। আপনি যদি একটি বিদ্যমান BLOB ডেটা আপডেট করতে চান, তাহলে UPDATE SQL স্টেটমেন্ট ব্যবহার করবেন।
উদাহরণ:
<?php
// MySQLi দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// ফাইল পাথ
$file = 'path_to_new_image.jpg';
// নতুন ফাইল কনটেন্ট পড়া
$fileContent = file_get_contents($file);
// Prepared statement ব্যবহার করে BLOB ডেটা আপডেট করা
$stmt = $conn->prepare("UPDATE images SET image_data = ? WHERE id = ?");
$stmt->bind_param("si", $fileContent, $id);
$id = 1; // এখানে id দিয়ে নির্দিষ্ট ইমেজ আপডেট করা হচ্ছে
$stmt->execute();
if ($stmt->affected_rows > 0) {
echo "Image updated successfully!";
} else {
echo "Error updating image!";
}
$stmt->close();
mysqli_close($conn);
?>
ব্যাখ্যা:
- নতুন ফাইলের বাইনারি ডেটা পড়া হচ্ছে এবং UPDATE স্টেটমেন্টের মাধ্যমে ডাটাবেসে আপডেট করা হচ্ছে।
- bind_param() ফাংশন ব্যবহার করে বাইনারি ডেটা এবং id প্যারামিটার একসাথে পাঠানো হচ্ছে।
5. BLOB ডেটা ডিলিট করা
BLOB ডেটা ডিলিট করার জন্য সাধারণত DELETE SQL স্টেটমেন্ট ব্যবহার করা হয়।
উদাহরণ:
<?php
// MySQLi দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// BLOB ডেটা ডিলিট করা
$sql = "DELETE FROM images WHERE id = 1";
if (mysqli_query($conn, $sql)) {
echo "Image deleted successfully!";
} else {
echo "Error deleting image: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
ব্যাখ্যা:
- DELETE স্টেটমেন্টের মাধ্যমে নির্দিষ্ট id এর BLOB ডেটা ডিলিট করা হচ্ছে।
MySQLi ব্যবহার করে BLOB (Binary Large Objects) হ্যান্ডলিং খুবই সহজ, যেখানে Prepared Statements এবং mysqli_query() এর মাধ্যমে BLOB ডেটা ইনসার্ট, রিড, আপডেট এবং ডিলিট করা যায়। ইমেজ, অডিও, ভিডিও, বা অন্য কোনো বাইনারি ফাইল ডেটাবেসে সুরক্ষিতভাবে সংরক্ষণ এবং পরিচালনা করার জন্য এটি একটি শক্তিশালী পদ্ধতি।