১. Multiple Result Sets কী?
Multiple Result Sets হলো এমন একটি অবস্থা যেখানে একটি একক SQL কুয়েরি একাধিক রেজাল্ট সেট রিটার্ন করে। এটি সাধারণত একটি Stored Procedure এর মাধ্যমে ঘটে থাকে, যেখানে একাধিক SELECT কুয়েরি একসঙ্গে এক্সিকিউট করা হয় এবং সেই কুয়েরিগুলোর ফলাফলগুলো একাধিক রেজাল্ট সেটে ভাগ হয়ে আসে। MySQLi ব্যবহার করে আমরা এই ধরনের একাধিক রেজাল্ট সেট খুব সহজে হ্যান্ডল করতে পারি।
২. Multiple Result Sets রিটার্ন করার জন্য Stored Procedure তৈরি করা
ধরা যাক, আমরা একটি Stored Procedure তৈরি করব যা দুটি আলাদা SELECT কুয়েরি একসাথে এক্সিকিউট করবে।
DELIMITER
DELIMITER ;
এই Stored Procedure দুটি SELECT কুয়েরি একসাথে এক্সিকিউট করে: একটিতে ইউজারের তথ্য এবং অন্যটিতে প্রোডাক্টের তথ্য রিটার্ন করবে।
৩. MySQLi দিয়ে Multiple Result Sets হ্যান্ডল করা
MySQLi দিয়ে Multiple Result Sets হ্যান্ডল করার জন্য next_result() মেথড ব্যবহার করা হয়। যখন একটি কুয়েরি একাধিক রেজাল্ট সেট রিটার্ন করে, তখন next_result() ব্যবহার করে পরবর্তী রেজাল্ট সেটে চলে যাওয়া যায়।
৩.১ Procedural Mode দিয়ে Multiple Result Sets হ্যান্ডল করা
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";
// সংযোগ স্থাপন
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Stored Procedure কল করা
$stmt = mysqli_prepare($conn, "CALL GetUserAndProductDetails()");
// কুয়েরি এক্সিকিউট করা
mysqli_stmt_execute($stmt);
// প্রথম রেজাল্ট সেট স্টোর করা
mysqli_stmt_store_result($stmt);
// প্রথম রেজাল্ট বাইন্ড করা
mysqli_stmt_bind_result($stmt, $id, $name, $email);
// প্রথম রেজাল্ট ফেচ করা
echo "Users:<br>";
while (mysqli_stmt_fetch($stmt)) {
echo "ID: " . $id . " - Name: " . $name . " - Email: " . $email . "<br>";
}
// পরবর্তী রেজাল্ট সেটে যেতে next_result() ব্যবহার করা
mysqli_stmt_next_result($stmt);
// দ্বিতীয় রেজাল্ট সেট স্টোর করা
mysqli_stmt_store_result($stmt);
// দ্বিতীয় রেজাল্ট বাইন্ড করা
mysqli_stmt_bind_result($stmt, $product_id, $product_name, $price);
// দ্বিতীয় রেজাল্ট ফেচ করা
echo "<br>Products:<br>";
while (mysqli_stmt_fetch($stmt)) {
echo "Product ID: " . $product_id . " - Name: " . $product_name . " - Price: " . $price . "<br>";
}
// স্টেটমেন্ট বন্ধ করা
mysqli_stmt_close($stmt);
// সংযোগ বন্ধ করা
mysqli_close($conn);
৩.২ Object-Oriented Mode দিয়ে Multiple Result Sets হ্যান্ডল করা
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";
// Object-oriented সংযোগ
$conn = new mysqli($servername, $username, $password, $dbname);
// Stored Procedure কল করা
$stmt = $conn->prepare("CALL GetUserAndProductDetails()");
// কুয়েরি এক্সিকিউট করা
$stmt->execute();
// প্রথম রেজাল্ট সেট স্টোর করা
$stmt->store_result();
// প্রথম রেজাল্ট বাইন্ড করা
$stmt->bind_result($id, $name, $email);
// প্রথম রেজাল্ট ফেচ করা
echo "Users:<br>";
while ($stmt->fetch()) {
echo "ID: $id - Name: $name - Email: $email <br>";
}
// পরবর্তী রেজাল্ট সেটে যেতে next_result() ব্যবহার করা
$stmt->next_result();
// দ্বিতীয় রেজাল্ট সেট স্টোর করা
$stmt->store_result();
// দ্বিতীয় রেজাল্ট বাইন্ড করা
$stmt->bind_result($product_id, $product_name, $price);
// দ্বিতীয় রেজাল্ট ফেচ করা
echo "<br>Products:<br>";
while ($stmt->fetch()) {
echo "Product ID: $product_id - Name: $product_name - Price: $price <br>";
}
// স্টেটমেন্ট বন্ধ করা
$stmt->close();
// সংযোগ বন্ধ করা
$conn->close();
৪. Multiple Result Sets হ্যান্ডল করার মূল পদ্ধতি
- store_result(): প্রতিটি রেজাল্ট সেট স্টোর করার জন্য ব্যবহৃত হয়।
- bind_result(): রেজাল্টের কলাম বাইন্ড করার জন্য ব্যবহৃত হয়।
- fetch(): রেজাল্ট থেকে ডেটা এক্সট্র্যাক্ট করার জন্য ব্যবহৃত হয়।
- next_result(): একাধিক রেজাল্ট সেটে যাওয়ার জন্য ব্যবহৃত হয়।
৫. Multiple Result Sets হ্যান্ডল করার সুবিধা
- পারফরম্যান্স উন্নতি: একাধিক কুয়েরি একত্রে এক্সিকিউট করা হয়, ফলে একাধিক আলাদা কুয়েরি পাঠানোর প্রয়োজন হয় না।
- কোডের সঙ্গতি: একাধিক কাজ একত্রে সম্পাদন করা যায়, ফলে কোড আরও সংহত ও পরিষ্কার থাকে।
- ডেটাবেজ রাউন্ড-ট্রিপ কমানো: একাধিক কুয়েরি একসঙ্গে এক্সিকিউট হলে সার্ভারে কম রাউন্ড-ট্রিপ হয়, যা পারফরম্যান্সে সহায়ক।
MySQLi দিয়ে Multiple Result Sets হ্যান্ডল করা খুবই সহজ। next_result() মেথডের মাধ্যমে একাধিক রেজাল্ট সেটের মধ্যে স্যুইচ করা সম্ভব এবং একাধিক রেজাল্ট একে অপরের পরে যথাযথভাবে ফেচ করা যায়। এটি Stored Procedures ব্যবহার করে ডেটাবেজের বেশ কিছু কার্যক্রম একসাথে পরিচালনা করতে সাহায্য করে এবং পারফরম্যান্স বৃদ্ধি করে।
Read more