MySQLi এর সাথে Multi-query Execution

মাইএসকিউএল আই (MySQLi) - Database Tutorials

379

Multi-query execution হল একাধিক SQL স্টেটমেন্ট একসাথে একটি সার্ভার কলের মাধ্যমে এক্সিকিউট করার প্রক্রিয়া। MySQLi একাধিক SQL কোয়েরি একসাথে এক্সিকিউট করার সুবিধা প্রদান করে, যা ডেটাবেসের পারফরম্যান্স এবং কোডের দক্ষতা বাড়াতে সাহায্য করে। তবে, একাধিক কোয়েরি একসাথে এক্সিকিউট করার সময় কিছু বিষয় মাথায় রাখা জরুরি, বিশেষ করে SQL Injection এর সুরক্ষা এবং error handling


1. Multi-query Execution কী?

Multi-query execution এর মাধ্যমে একাধিক SQL কোয়েরি একই mysqli_query() বা mysqli_multi_query() ফাংশনের মাধ্যমে একে অপরের পরে এক্সিকিউট করা যায়। এটি সাধারনত তখন ব্যবহৃত হয় যখন আপনি একসাথে অনেকগুলি INSERT, UPDATE, DELETE বা অন্যান্য SQL স্টেটমেন্ট এক্সিকিউট করতে চান।


2. MySQLi তে Multi-query Execution এর পদ্ধতি

MySQLi তে multi-query execution করার জন্য mysqli_multi_query() ফাংশন ব্যবহার করা হয়। এই ফাংশনটি একাধিক SQL কোয়েরি একত্রে সেকুয়েন্সিয়ালি এক্সিকিউট করতে সক্ষম।

উদাহরণ:

ধরা যাক, আমরা একটি ডেটাবেসে কয়েকটি INSERT এবং UPDATE অপারেশন একত্রে এক্সিকিউট করতে চাই।

<?php
// MySQLi দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");

// যদি সংযোগ সফল হয়
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// Multi-query তৈরি করা
$query = "INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');";
$query .= "UPDATE users SET email = 'johndoe@example.com' WHERE name = 'John Doe';";
$query .= "INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane@example.com');";

// Multi-query এক্সিকিউট করা
if (mysqli_multi_query($conn, $query)) {
    echo "Queries executed successfully";
    
    // প্রতিটি কোয়েরির রেজাল্ট প্রক্রিয়া করা
    do {
        // যদি কোনো রেজাল্ট সেট পাওয়া যায়
        if ($result = mysqli_store_result($conn)) {
            // রেজাল্ট প্রিন্ট করা
            while ($row = mysqli_fetch_assoc($result)) {
                print_r($row);
            }
            mysqli_free_result($result);
        }
    } while (mysqli_next_result($conn));  // পরবর্তী কোয়েরি যদি থাকে

} else {
    echo "Error executing queries: " . mysqli_error($conn);
}

// সংযোগ বন্ধ করা
mysqli_close($conn);
?>

ব্যাখ্যা:

  1. mysqli_multi_query() ফাংশনটি একাধিক কোয়েরি একসাথে এক্সিকিউট করতে ব্যবহৃত হয়।
  2. কোয়েরিগুলিকে ; দিয়ে আলাদা করা হয়, যাতে MySQL এইগুলিকে আলাদা আলাদা করে পার্স এবং এক্সিকিউট করতে পারে।
  3. do...while লুপের মাধ্যমে প্রতিটি কোয়েরির রেজাল্ট প্রক্রিয়া করা হয়। যদি কোয়েরি কোনো রেজাল্ট সেট রিটার্ন করে (যেমন SELECT স্টেটমেন্ট), তাহলে mysqli_store_result() ব্যবহার করে সেই রেজাল্টটি ফেচ করা হয়।
  4. mysqli_next_result() ফাংশনটি পরবর্তী কোয়েরির রেজাল্ট চেক করতে ব্যবহৃত হয়। এটি শুধু তখন ব্যবহৃত হয় যখন একাধিক কোয়েরি আছে এবং তারা SELECT বা কোনো রেজাল্ট রিটার্ন করে।

3. Multi-query Execution এর সুবিধা

  • পারফরম্যান্স বৃদ্ধি: একাধিক SQL কোয়েরি একই সার্ভার কলের মাধ্যমে এক্সিকিউট করা হলে কম নেটওয়ার্ক লেটেন্সি হয়, ফলে পারফরম্যান্স উন্নত হয়।
  • কোডের সন্নিবেশ: একাধিক SQL কোয়েরি একসাথে এক্সিকিউট করতে পারলে কোডটি আরও সংক্ষিপ্ত এবং পরিষ্কার থাকে।
  • কম্প্লেক্স অপারেশন: একাধিক ডেটাবেস অপারেশন একসাথে পরিচালনা করতে সহায়তা করে, যেমন একসাথে ইনসার্ট এবং আপডেট করা।

4. Multi-query Execution এর ঝুঁকি এবং সতর্কতা

  • SQL Injection: যেমন একাধিক SQL কোয়েরি একসাথে এক্সিকিউট করা হয়, তাই নিশ্চিত হতে হবে যে কোনো SQL Injection আক্রমণ থেকে রক্ষা পেতে প্রয়োজনীয় স্যানিটাইজেশন এবং প্রস্তুতকৃত স্টেটমেন্ট ব্যবহার করা হচ্ছে।

    Prepared Statements ব্যবহার করা হলে নিরাপত্তা নিশ্চিত করা যায়, কারণ এতে ইউজার ইনপুট সরাসরি SQL কোয়েরির অংশ হিসেবে প্রবেশ করতে পারে না।

  • Error Handling: একাধিক কোয়েরি এক্সিকিউট করার সময় যদি কোনো একটি কোয়েরি ত্রুটি ঘটায়, তাহলে সঠিক error handling না থাকলে বাকি কোয়েরি কার্যকরী হতে পারে না। তাই প্রতিটি কোয়েরি প্রক্রিয়া করা এবং ত্রুটি সনাক্ত করা খুবই গুরুত্বপূর্ণ।
  • Transaction Management: যদি একাধিক SQL কোয়েরি একসাথে এক্সিকিউট করা হয় এবং তার মধ্যে একটি কোয়েরি ব্যর্থ হয়, তাহলে পুরো ট্রান্সেকশনটি রোলব্যাক করা উচিত। এজন্য BEGIN TRANSACTION, COMMIT, এবং ROLLBACK ব্যবহৃত হতে পারে।

উদাহরণ: ট্রান্সেকশন ব্যবহারের মাধ্যমে Multi-query Execution

<?php
// MySQLi দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");

if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// ট্রান্সেকশন শুরু
mysqli_begin_transaction($conn);

$query = "INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');";
$query .= "UPDATE users SET email = 'johndoe@example.com' WHERE name = 'John Doe';";

if (mysqli_multi_query($conn, $query)) {
    mysqli_commit($conn);  // ট্রান্সেকশন কমিট করা
    echo "Queries executed successfully";
} else {
    mysqli_rollback($conn);  // কোনো ত্রুটি হলে ট্রান্সেকশন রোলব্যাক করা
    echo "Error executing queries: " . mysqli_error($conn);
}

mysqli_close($conn);
?>

এখানে, mysqli_begin_transaction(), mysqli_commit(), এবং mysqli_rollback() ফাংশনগুলো ব্যবহার করে সঠিকভাবে ট্রান্সেকশন পরিচালনা করা হয়েছে।


MySQLi তে multi-query execution একাধিক SQL কোয়েরি একত্রে কার্যকরীভাবে এক্সিকিউট করার একটি শক্তিশালী পদ্ধতি। এটি পারফরম্যান্স বাড়াতে এবং কোড সন্নিবেশ করতে সহায়তা করে। তবে, নিরাপত্তা এবং সঠিক ত্রুটি ব্যবস্থাপনা নিশ্চিত করতে prepared statements এবং transactions ব্যবহারের উপর বিশেষ গুরুত্ব দেওয়া উচিত।

Content added By

Multi-query Execution হল এমন একটি ফিচার যা আপনাকে একক কনেকশনের মাধ্যমে একাধিক SQL কুয়েরি একসাথে এক্সিকিউট করার সুবিধা দেয়। MySQLi এ multi-query execution এর মাধ্যমে আপনি একাধিক কুয়েরি একবারে ডাটাবেসে পাঠাতে পারেন এবং সেগুলোর ফলাফল একসাথে পেতে পারেন।

এটি বিশেষভাবে তখন উপকারী যখন একাধিক SQL অপারেশন (যেমন INSERT, UPDATE, DELETE ইত্যাদি) এক সাথে এক্সিকিউট করতে হয় এবং আপনি একাধিক কুয়েরি একযোগে প্রক্রিয়া করতে চান।


Multi-query Execution এর সুবিধা

  • পারফরম্যান্স বৃদ্ধি: একাধিক কুয়েরি একযোগে প্রক্রিয়া করা হলে, ডাটাবেসে আলাদা আলাদা কানেকশনের প্রয়োজন হয় না, ফলে পারফরম্যান্স উন্নত হয়।
  • কোড কমপ্লেক্সিটি কমানো: একাধিক কুয়েরি একসাথে পাঠানো কোডের কমপ্লেক্সিটি কমায় এবং কোড আরও পরিষ্কার হয়।

1. MySQLi তে Multi-query Execution ব্যবহার করা

এখন, MySQLi এর মাধ্যমে একাধিক কুয়েরি একসাথে এক্সিকিউট করার পদ্ধতি দেখব।

1.1 কানেকশন তৈরি করা

প্রথমে, ডাটাবেসের সাথে কানেকশন তৈরি করতে হবে:

<?php
$host = "localhost";    // Database host
$user = "root";         // Database username
$password = "";         // Database password
$dbname = "test";       // Database name

// MySQLi connection
$conn = new mysqli($host, $user, $password, $dbname);

// Check the connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
?>

1.2 Multiple Queries এক্সিকিউট করা

এখন, একাধিক SQL কুয়েরি একসাথে এক্সিকিউট করার জন্য multi_query() মেথড ব্যবহার করা হবে। নিচে একটি উদাহরণ দেওয়া হলো:

<?php
// Define multiple queries
$query = "INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com'); 
          UPDATE users SET email = 'newjohn@example.com' WHERE username = 'john_doe'; 
          DELETE FROM users WHERE username = 'old_user';";

// Execute multiple queries
if ($conn->multi_query($query)) {
    echo "Queries executed successfully.";
} else {
    echo "Error: " . $conn->error;
}
?>

এখানে, তিনটি SQL কুয়েরি একসাথে লিখা হয়েছে:

  1. একটি INSERT কুয়েরি, যেটি একটি নতুন ইউজার ইনসার্ট করবে।
  2. একটি UPDATE কুয়েরি, যেটি ইউজারের ইমেইল ঠিক করবে।
  3. একটি DELETE কুয়েরি, যেটি একটি পুরনো ইউজার ডিলিট করবে।

multi_query() মেথডটি সমস্ত কুয়েরি একসাথে এক্সিকিউট করে এবং সফল হলে true রিটার্ন করবে।


2. Query Results পাওয়া

যেহেতু একাধিক কুয়েরি একসাথে এক্সিকিউট করা হয়েছে, তাই প্রতিটি কুয়েরির জন্য আলাদা ফলাফল পাওয়া যাবে। MySQLi তে multi_query() মেথড ব্যবহার করার পর, আপনি next_result() মেথড ব্যবহার করে একে একে প্রতিটি কুয়েরির ফলাফল পেতে পারেন।

<?php
// Define multiple queries
$query = "SELECT * FROM users; 
          SELECT COUNT(*) FROM users;";

// Execute the multi-query
if ($conn->multi_query($query)) {
    // First result
    $result1 = $conn->store_result();
    while ($row = $result1->fetch_assoc()) {
        echo "Username: " . $row['username'] . "<br>";
    }

    // Second result (e.g., counting rows)
    if ($conn->more_results()) {
        $conn->next_result();  // Move to next result
        $result2 = $conn->store_result();
        $count = $result2->fetch_row();
        echo "Total users: " . $count[0];
    }
} else {
    echo "Error: " . $conn->error;
}
?>

এখানে:

  1. প্রথম কুয়েরি SELECT * FROM users ইউজারদের তথ্য রিটার্ন করবে।
  2. দ্বিতীয় কুয়েরি SELECT COUNT(*) FROM users ইউজারদের মোট সংখ্যা রিটার্ন করবে।

more_results() চেক করে যদি আরও কোন ফলাফল থাকে তবে next_result() মেথড ব্যবহার করে পরবর্তী কুয়েরির ফলাফল প্রাপ্তি নিশ্চিত করা হয়।


3. Multi-query Execution এর সতর্কতা

যদিও multi-query execution দ্রুত এবং কার্যকরী হতে পারে, তবে এটি কিছু সতর্কতার বিষয় নিয়ে আসে:

  • SQL Injection: একাধিক কুয়েরি একসাথে পাঠানো হলে, সেগুলোর মধ্যে নিরাপত্তার গ্যাপ থাকতে পারে। তাই prepared statements এবং parameterized queries ব্যবহার করা উচিত, যাতে SQL injection থেকে রক্ষা পাওয়া যায়।
  • Error Handling: একাধিক কুয়েরি একসাথে এক্সিকিউট করা হলে, একটির ত্রুটির কারণে সমস্ত কুয়েরির কার্যক্রম বন্ধ হতে পারে। তাই ত্রুটির সঠিক হ্যান্ডলিং করা উচিত।

সারাংশ

MySQLi এর multi-query execution ফিচারটি একাধিক SQL কুয়েরি একযোগে এক্সিকিউট করার সুবিধা দেয়, যা কোডের কার্যকারিতা এবং ডাটাবেসে কার্যক্রম পরিচালনাকে দ্রুত ও কার্যকরী করে। তবে, এই ফিচার ব্যবহার করার সময় সতর্কতা অবলম্বন করা উচিত, বিশেষ করে SQL injection প্রতিরোধ এবং ত্রুটি হ্যান্ডলিংয়ের ক্ষেত্রে।

Content added By

MySQLi এর multi_query ফাংশন একটি শক্তিশালী ফাংশন, যা একাধিক SQL কোয়েরি একসাথে এক্সিকিউট করার সুবিধা প্রদান করে। এটি বিশেষ করে তখন উপকারী যখন একাধিক কোয়েরি (যেমন: SELECT, INSERT, UPDATE, DELETE) একে অপরের সাথে সম্পর্কিত থাকে এবং একই সময় একসাথে এক্সিকিউট করতে হয়। multi_query ফাংশন একাধিক SQL স্টেটমেন্ট একযোগে প্রক্রিয়া করতে সক্ষম এবং প্রতিটি স্টেটমেন্টের ফলাফল একসাথে ফেরত দেয়।


multi_query এর ব্যবহারের সুবিধাসমূহ

  1. একাধিক কোয়েরি একসাথে এক্সিকিউট করা: আপনি একাধিক SQL কোয়েরি একসাথে ব্যবহার করতে পারেন, যেগুলি বিভিন্ন প্রক্রিয়া সম্পাদন করবে।
  2. পারফরম্যান্স উন্নতি: একাধিক কোয়েরি একসাথে এক্সিকিউট করার মাধ্যমে ডেটাবেস সার্ভারের উপর লোড কমানো যায়, কারণ এটি একক কানেকশনের মাধ্যমে একাধিক কাজ সম্পাদন করে।
  3. ফলাফল সংগ্রহ করা: প্রতিটি কোয়েরির জন্য আলাদা আলাদা ফলাফল সংগ্রহ করা সম্ভব, যা পরে ব্যবহার করা যায়।

multi_query ফাংশন ব্যবহার

ধাপ ১: একাধিক SQL কোয়েরি তৈরি করুন।

ধাপ ২: multi_query() ফাংশন ব্যবহার করে কোয়েরিগুলিকে একসাথে এক্সিকিউট করুন।

ধাপ ৩: প্রতিটি কোয়েরির ফলাফল পরিচালনা করুন।

উদাহরণ:

<?php
// ডেটাবেস কানেকশন তৈরি
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database_name";
$conn = new mysqli($servername, $username, $password, $dbname);

// কানেকশন চেক
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// একাধিক SQL কোয়েরি তৈরি
$sql = "SELECT * FROM users; 
        INSERT INTO users (name, age, email) VALUES ('John Doe', 25, 'john@example.com'); 
        UPDATE users SET age = 26 WHERE name = 'John Doe';";

// multi_query ফাংশন ব্যবহার
if ($conn->multi_query($sql)) {
    do {
        // প্রথম কোয়েরি এক্সিকিউট করার ফলাফল চেক করা
        if ($result = $conn->store_result()) {
            while ($row = $result->fetch_assoc()) {
                echo "User: " . $row['name'] . " - Age: " . $row['age'] . "<br>";
            }
            $result->free();
        }

        // পরবর্তী কোয়েরি থাকলে সেগুলিও এক্সিকিউট হবে
    } while ($conn->next_result());
} else {
    echo "Error: " . $conn->error;
}

// কানেকশন বন্ধ করা
$conn->close();
?>

ব্যাখ্যা:

  • SQL কোয়েরি: এখানে তিনটি SQL স্টেটমেন্ট একসাথে রয়েছে:
    1. একটি SELECT স্টেটমেন্ট যা ইউজারের তথ্য নিয়ে আসে।
    2. একটি INSERT স্টেটমেন্ট যা নতুন ইউজার ডেটা সন্নিবেশ করে।
    3. একটি UPDATE স্টেটমেন্ট যা একটি নির্দিষ্ট ইউজারের বয়স আপডেট করে।
  • multi_query(): এই ফাংশনটি একাধিক SQL কোয়েরি একসাথে প্রেরণ করে। যদি কোয়েরিগুলি সফলভাবে এক্সিকিউট হয়, তবে do-while লুপের মাধ্যমে প্রতিটি কোয়েরির ফলাফল সংগ্রহ করা হয়।
  • store_result(): SELECT কোয়েরির ফলাফলগুলি সংগ্রহ করতে ব্যবহৃত হয়। অন্য কোয়েরিগুলির জন্য এটি প্রযোজ্য নয় (যেমন INSERT বা UPDATE)।
  • next_result(): পরবর্তী কোয়েরির ফলাফল পেতে next_result() ব্যবহার করা হয়। এটি পরবর্তী কোয়েরি এক্সিকিউট হওয়ার আগ পর্যন্ত প্রক্রিয়া চালিয়ে যায়।

2. Error Handling (ত্রুটি পরিচালনা)

multi_query ব্যবহার করার সময় যদি কোনো কোয়েরি ভুল থাকে বা প্রক্রিয়ায় ত্রুটি ঘটে, তাহলে তা conn->error ব্যবহার করে জানা যাবে।

উদাহরণ:

<?php
// SQL কোয়েরি সঠিকভাবে না হলে ত্রুটি প্রক্রিয়া
$sql = "SELECT * FROM users;
        INSERT INTO non_existent_table (name) VALUES ('Error Test');";

// multi_query ফাংশন ব্যবহার
if (!$conn->multi_query($sql)) {
    echo "Error: " . $conn->error;
}
?>

এই কোডে দ্বিতীয় কোয়েরিটি ভুল হতে পারে কারণ non_existent_table টেবিলটি নেই। multi_query ত্রুটি জানালে তা conn->error মাধ্যমে দেখানো হবে।


সারাংশ

MySQLi এর multi_query ফাংশন ব্যবহার করে একাধিক SQL কোয়েরি একসাথে এক্সিকিউট করা সম্ভব, যা ডেটাবেসের কার্যকারিতা এবং পারফরম্যান্স উন্নত করে। এটি সঠিকভাবে ফলাফল সংগ্রহ এবং ত্রুটি পরিচালনার সুবিধা প্রদান করে। একাধিক কোয়েরি একসাথে প্রক্রিয়া করার জন্য multi_query একটি শক্তিশালী টুল।


Content added By

১. Multiple Result Sets কী?

Multiple Result Sets হলো এমন একটি অবস্থা যেখানে একটি একক SQL কুয়েরি একাধিক রেজাল্ট সেট রিটার্ন করে। এটি সাধারণত একটি Stored Procedure এর মাধ্যমে ঘটে থাকে, যেখানে একাধিক SELECT কুয়েরি একসঙ্গে এক্সিকিউট করা হয় এবং সেই কুয়েরিগুলোর ফলাফলগুলো একাধিক রেজাল্ট সেটে ভাগ হয়ে আসে। MySQLi ব্যবহার করে আমরা এই ধরনের একাধিক রেজাল্ট সেট খুব সহজে হ্যান্ডল করতে পারি।


২. Multiple Result Sets রিটার্ন করার জন্য Stored Procedure তৈরি করা

ধরা যাক, আমরা একটি Stored Procedure তৈরি করব যা দুটি আলাদা SELECT কুয়েরি একসাথে এক্সিকিউট করবে।

DELIMITER CREATEPROCEDUREGetUserAndProductDetails()BEGIN--ি:SELECTid,name,emailFROMusers;--িি:SELECTid,productname,priceFROMproducts;END

CREATE PROCEDURE GetUserAndProductDetails()
BEGIN
    -- প্রথম কুয়েরি: ইউজারদের তথ্য
    SELECT id, name, email FROM users;
    
    -- দ্বিতীয় কুয়েরি: প্রোডাক্টের তথ্য
    SELECT id, product_name, price FROM products;
END

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 হ্যান্ডল করার সুবিধা

  1. পারফরম্যান্স উন্নতি: একাধিক কুয়েরি একত্রে এক্সিকিউট করা হয়, ফলে একাধিক আলাদা কুয়েরি পাঠানোর প্রয়োজন হয় না।
  2. কোডের সঙ্গতি: একাধিক কাজ একত্রে সম্পাদন করা যায়, ফলে কোড আরও সংহত ও পরিষ্কার থাকে।
  3. ডেটাবেজ রাউন্ড-ট্রিপ কমানো: একাধিক কুয়েরি একসঙ্গে এক্সিকিউট হলে সার্ভারে কম রাউন্ড-ট্রিপ হয়, যা পারফরম্যান্সে সহায়ক।

MySQLi দিয়ে Multiple Result Sets হ্যান্ডল করা খুবই সহজ। next_result() মেথডের মাধ্যমে একাধিক রেজাল্ট সেটের মধ্যে স্যুইচ করা সম্ভব এবং একাধিক রেজাল্ট একে অপরের পরে যথাযথভাবে ফেচ করা যায়। এটি Stored Procedures ব্যবহার করে ডেটাবেজের বেশ কিছু কার্যক্রম একসাথে পরিচালনা করতে সাহায্য করে এবং পারফরম্যান্স বৃদ্ধি করে।

Content added By

MySQLi (MySQL Improved) একটি শক্তিশালী টুল যা MySQL ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য ব্যবহৃত হয়। Multi-query execution এর মাধ্যমে একাধিক SQL কুয়েরি একসাথে চালানো যায়। তবে, একাধিক কুয়েরি একসাথে চালানোর সময় যদি কোনো ত্রুটি (error) ঘটে, তবে তা সঠিকভাবে হ্যান্ডল করা খুবই গুরুত্বপূর্ণ।


MySQLi Multi-query Execution

MySQLi ড্রাইভার ব্যবহার করে একাধিক কুয়েরি একসাথে চালানোর জন্য multi_query() মেথড ব্যবহার করা হয়। এই মেথডটি একাধিক কুয়েরি প্রসেস করতে সক্ষম, তবে একে সঠিকভাবে ব্যবহারের জন্য error-handling এর পদ্ধতি জানা অত্যন্ত প্রয়োজন।

<?php
$mysqli = new mysqli("localhost", "username", "password", "database_name");

if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

$query = "SELECT * FROM users; INSERT INTO users (name, email) VALUES ('John Doe', 'john@example.com');";

if ($mysqli->multi_query($query)) {
    do {
        // প্রাপ্ত ফলাফল বা ত্রুটি চেক করা হচ্ছে
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_assoc()) {
                echo "User: " . $row['name'] . "\n";
            }
            $result->free();
        }
    } while ($mysqli->more_results() && $mysqli->next_result());
} else {
    echo "Error: " . $mysqli->error;
}

$mysqli->close();
?>

Error Handling in Multi-query Execution

এখানে multi_query() মেথডটি ব্যবহার করা হয়েছে, যা একাধিক কুয়েরি একসাথে প্রক্রিয়া করে। যদি কোনো কুয়েরিতে সমস্যা ঘটে, তবে তা সঠিকভাবে চিহ্নিত এবং হ্যান্ডল করা জরুরি।

  1. Error Checking After Execution: multi_query() সফল হলে true রিটার্ন করে, আর ত্রুটি ঘটলে false রিটার্ন করে। তাই, প্রথমে চেক করা হয় যে কুয়েরি সফলভাবে সম্পন্ন হয়েছে কিনা।
  2. Handling Multiple Results: একাধিক কুয়েরি চলানোর সময়, প্রতিটি কুয়েরির ফলাফল আলাদা ভাবে চেক করা হয়। যদি কোনো কুয়েরি ত্রুটি প্রদান করে, তাহলে পরবর্তী কুয়েরির প্রসেসিং থামিয়ে দেওয়া উচিত।
  3. Error Message: ত্রুটি ঘটলে, $mysqli->error ব্যবহার করে ত্রুটির বার্তা সংগ্রহ করা যায়। এটি আপনার কুয়েরির সমস্যা বা MySQL সার্ভারের অন্যান্য ত্রুটি সম্পর্কে বিস্তারিত তথ্য প্রদান করে।

Error Handling Example

<?php
$query = "SELECT * FROM users; INSERT INTO users (name, email) VALUES ('Jane Doe', 'jane@example.com');";

if ($mysqli->multi_query($query)) {
    do {
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_assoc()) {
                echo "User: " . $row['name'] . "\n";
            }
            $result->free();
        }
    } while ($mysqli->more_results() && $mysqli->next_result());
} else {
    echo "Query Error: " . $mysqli->error;  // Error message displayed here
}
?>

MySQLi এর Multi-query execution এর সময় ত্রুটির সঠিক হ্যান্ডলিং নিশ্চিত করার জন্য, উপরোক্ত পদ্ধতিটি অনুসরণ করা উচিত। একাধিক কুয়েরির প্রক্রিয়াকরণ নিশ্চিত করতে more_results() এবং next_result() মেথডগুলোও ব্যবহার করা হয়।

Content added By
Promotion

Are you sure to start over?

Loading...