Stored Procedures হল MySQL ডেটাবেসের একটি গুরুত্বপূর্ণ ফিচার, যা একটি নির্দিষ্ট কাজ বা প্রসেসকে এক বা একাধিক SQL স্টেটমেন্টের মাধ্যমে সংজ্ঞায়িত করে এবং ডেটাবেসের মধ্যে সংরক্ষণ করে। এই প্রসিডিওরগুলো পরবর্তীতে প্রয়োজনে বার বার এক্সিকিউট করা যায়।
MySQLi ব্যবহার করে পিএইচপিতে Stored Procedures কল করা খুবই সহজ এবং এটি প্রক্রিয়াগুলিকে আরও কার্যকরী এবং নিরাপদ করে তোলে।
Stored Procedure এর সুবিধা
- কোড পুনরায় ব্যবহারযোগ্যতা: একবার তৈরি করার পর, স্টোরড প্রসিডিওরটি বারবার ব্যবহার করা যায়।
- পারফরম্যান্স বৃদ্ধি: প্রসিডিওরটি ডেটাবেসের মধ্যে সংরক্ষিত থাকায়, এটি বার বার কম্পাইল করা হয় না।
- নিরাপত্তা বৃদ্ধি: SQL ইনজেকশন থেকে সুরক্ষা প্রদান করে কারণ এর মধ্যে প্যারামিটারাইজড কোয়েরি ব্যবহৃত হয়।
- কোনো প্রোগ্রামিং ভাষার সাথে সংযুক্ত করা সহজ: MySQLi বা PDO ব্যবহার করে এটি সহজেই এক্সিকিউট করা যায়।
MySQLi দিয়ে Stored Procedure কল করা
MySQLi ব্যবহার করে Stored Procedure কল করতে দুটি প্রধান পদ্ধতি রয়েছে:
- CALL স্টেটমেন্ট ব্যবহার করা
- Prepared Statements ব্যবহার করা (যেখানে প্যারামিটার ব্যবহার করা হয়)
1. Stored Procedure তৈরি করা
প্রথমে, ডেটাবেসে একটি Stored Procedure তৈরি করা প্রয়োজন।
উদাহরণ:
DELIMITER //
CREATE PROCEDURE GetUserByEmail(IN user_email VARCHAR(255))
BEGIN
SELECT id, name, email FROM users WHERE email = user_email;
END //
DELIMITER ;
এখানে:
GetUserByEmailহল স্টোরড প্রসিডিওরটির নাম।IN user_emailহল প্যারামিটার, যা ব্যবহারকারীর ইমেইল গ্রহণ করবে।SELECTস্টেটমেন্টটি ব্যবহারকারীকে তার ইমেইলের ভিত্তিতে খুঁজে বের করবে।
2. MySQLi দিয়ে Stored Procedure কল করা
এখন, PHP ব্যবহার করে MySQLi দিয়ে এই Stored Procedure কল করতে হবে।
উদাহরণ:
<?php
// MySQLi দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");
// Stored Procedure কল করা
$sql = "CALL GetUserByEmail(?)";
// Prepared Statement তৈরি করা
$stmt = mysqli_prepare($conn, $sql);
// প্যারামিটার বাইন্ড করা
$email = "john@example.com";
mysqli_stmt_bind_param($stmt, "s", $email); // "s" মানে string প্যারামিটার
// Stored Procedure এক্সিকিউট করা
mysqli_stmt_execute($stmt);
// রেজাল্ট ফেচ করা
$result = mysqli_stmt_get_result($stmt);
// রেজাল্ট প্রিন্ট করা
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["name"]. " - Email: " . $row["email"]. "<br>";
}
} else {
echo "No results found";
}
// স্টেটমেন্ট বন্ধ করা
mysqli_stmt_close($stmt);
// সংযোগ বন্ধ করা
mysqli_close($conn);
?>
এখানে:
- mysqli_prepare() ফাংশনটি Prepared Statement তৈরি করে।
- mysqli_stmt_bind_param() ফাংশনটি প্যারামিটার বাইন্ড করে।
- mysqli_stmt_execute() ফাংশনটি স্টোরড প্রসিডিওর এক্সিকিউট করে।
- mysqli_stmt_get_result() ফাংশনটি স্টোরড প্রসিডিওরের ফলাফল রিটার্ন করে।
3. আউটপুট প্যারামিটার ব্যবহার করা
কিছু স্টোরড প্রসিডিওরে আউটপুট প্যারামিটারও থাকতে পারে। এর মাধ্যমে আপনি স্টোরড প্রসিডিওর থেকে আউটপুট ভ্যালু গ্রহণ করতে পারেন। নিচে আউটপুট প্যারামিটার ব্যবহারের একটি উদাহরণ দেওয়া হলো:
Stored Procedure উদাহরণ:
DELIMITER //
CREATE PROCEDURE GetUserCount(OUT total_users INT)
BEGIN
SELECT COUNT(*) INTO total_users FROM users;
END //
DELIMITER ;
এখানে, total_users একটি আউটপুট প্যারামিটার যা টেবিলের মোট রেকর্ড সংখ্যা ধারণ করবে।
PHP কোড উদাহরণ:
<?php
// MySQLi দিয়ে সংযোগ তৈরি
$conn = mysqli_connect("localhost", "root", "", "test_db");
// Stored Procedure কল করা
$sql = "CALL GetUserCount(?)";
// Prepared Statement তৈরি করা
$stmt = mysqli_prepare($conn, $sql);
// আউটপুট প্যারামিটার বাইন্ড করা
mysqli_stmt_bind_param($stmt, "i", $total_users); // "i" মানে integer আউটপুট
// Stored Procedure এক্সিকিউট করা
mysqli_stmt_execute($stmt);
// আউটপুট প্যারামিটার প্রিন্ট করা
echo "Total users: " . $total_users;
// স্টেটমেন্ট বন্ধ করা
mysqli_stmt_close($stmt);
// সংযোগ বন্ধ করা
mysqli_close($conn);
?>
এখানে:
- mysqli_stmt_bind_param() ফাংশনটি আউটপুট প্যারামিটার বাইন্ড করে এবং পরে এক্সিকিউট করার পর তার মান নেওয়া হয়।
4. Stored Procedure এর ফলাফল প্রক্রিয়া করা
স্টোরড প্রসিডিওর এক্সিকিউট করার পর আপনি তার ফলাফল (যেমন SELECT স্টেটমেন্টের আউটপুট) প্রক্রিয়া করতে পারেন। এটি করার জন্য mysqli_stmt_get_result() ফাংশনটি ব্যবহার করা হয়, যা স্টোরড প্রসিডিওর থেকে রিটার্ন হওয়া রেকর্ডগুলো সংগ্রহ করতে সহায়তা করে।
MySQLi দিয়ে Stored Procedures ব্যবহার করলে ডেটাবেসের মধ্যে জটিল SQL কোড সংরক্ষণ করা যায়, যা পরবর্তীতে সহজে পুনরায় ব্যবহার করা যায়। Prepared Statements ব্যবহার করে MySQLi দিয়ে স্টোরড প্রসিডিওর কল করা নিরাপদ এবং কার্যকরী। এই প্রক্রিয়া ডেটাবেস অপারেশনগুলিকে আরও দ্রুত এবং নির্ভরযোগ্য করে তোলে।
Stored Procedure একটি প্রি-ডিফাইন্ড SQL কোড ব্লক যা ডাটাবেসে সংরক্ষিত থাকে এবং এক বা একাধিক SQL অপারেশন সম্পাদন করতে ব্যবহার করা হয়। MySQLi এর মাধ্যমে stored procedure কল করার পদ্ধতি পরবর্তী অংশে বর্ণনা করা হয়েছে।
1. Stored Procedure তৈরি করা
প্রথমে, MySQL ডাটাবেসে একটি stored procedure তৈরি করতে হবে। এই stored procedure ডাটাবেসে সংরক্ষিত থাকবে এবং প্রয়োজন অনুযায়ী একাধিক বার কল করা যাবে।
এখানে একটি সাধারণ stored procedure তৈরি করার উদাহরণ দেওয়া হলো, যা ইউজারের নাম এবং ইমেইল সিলেক্ট করে:
DELIMITER //
CREATE PROCEDURE GetUserInfo(IN user_id INT)
BEGIN
SELECT username, email FROM users WHERE id = user_id;
END //
DELIMITER ;
এই stored procedure GetUserInfo ইউজারের id ইনপুট হিসেবে গ্রহণ করে এবং সেই ইউজারের username এবং email নির্বাচন করে।
- DELIMITER //: এটি স্টোরড প্রোসিজার তৈরি করার জন্য ডিফল্ট ডেলিমিটার (
;) পরিবর্তন করে একটি নতুন ডেলিমিটার//ব্যবহার করা হয়। এটা স্টোরড প্রোসিজার শেষ হওয়ার জন্য দরকার। - IN user_id INT: ইনপুট প্যারামিটার, যেখানে ইউজারের ID দেয়া হবে।
2. Stored Procedure কল করা MySQLi দিয়ে
এবার MySQLi এর মাধ্যমে স্টোরড প্রোসিজার কল করার জন্য নীচের ধাপগুলি অনুসরণ করতে হবে:
2.1 MySQLi কানেকশন তৈরি করা
প্রথমে MySQLi কানেকশন তৈরি করতে হবে:
<?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 connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
2.2 Stored Procedure কল করা
এখন stored procedure কল করার জন্য call স্টেটমেন্ট ব্যবহার করা হবে। নিচে একটি উদাহরণ দেওয়া হলো:
<?php
// Prepare the call statement for stored procedure
$user_id = 1; // Example user ID
$stmt = $conn->prepare("CALL GetUserInfo(?)");
$stmt->bind_param("i", $user_id); // 'i' stands for integer data type
$stmt->execute();
- এখানে,
CALL GetUserInfo(?)স্টেটমেন্টটি স্টোরড প্রোসিজার কল করার জন্য ব্যবহৃত হয়েছে, যেখানে?হল প্লেসহোল্ডার। - bind_param("i", $user_id): এটি
user_idপ্যারামিটারটি স্টোরড প্রোসিজারের সাথে বাউন্ড করে এবং তার টাইপ integer (i) হিসেবে নির্ধারণ করে।
2.3 Result Fetch করা
স্টোরড প্রোসিজার এক্সিকিউট করার পর, এর রেজাল্ট ফেচ করার জন্য get_result() মেথড ব্যবহার করা যাবে। উদাহরণ:
<?php
// Get the result from the stored procedure
$result = $stmt->get_result();
// Fetch and display the data
while ($row = $result->fetch_assoc()) {
echo "Username: " . $row['username'] . "<br>";
echo "Email: " . $row['email'] . "<br>";
}
?>
এখানে fetch_assoc() ব্যবহার করে ফলাফলটি অ্যাসোসিয়েটিভ অ্যারে হিসেবে পাওয়া যাবে।
2.4 Prepared Statement এবং Connection বন্ধ করা
এখন, কাজ শেষে prepared statement এবং MySQLi connection বন্ধ করা উচিত:
<?php
$stmt->close(); // Close the prepared statement
$conn->close(); // Close the database connection
?>
3. অন্য ধরণের Stored Procedure কল
যদি আপনি OUT parameters বা INOUT parameters সহ স্টোরড প্রোসিজার তৈরি করতে চান, তাহলে তাদের ব্যবহার একটু ভিন্ন হবে। নিচে একটি OUT parameter সহ স্টোরড প্রোসিজার কল করার উদাহরণ দেওয়া হলো।
3.1 Stored Procedure with OUT parameter
ধরা যাক, আমাদের একটি stored procedure রয়েছে, যা একটি ইউজারের তথ্য প্রদান করার সাথে সাথে একটি আউটপুট প্যারামিটারও রিটার্ন করবে:
DELIMITER //
CREATE PROCEDURE GetUserInfoWithStatus(IN user_id INT, OUT status_message VARCHAR(255))
BEGIN
SELECT username, email FROM users WHERE id = user_id;
SET status_message = 'User found';
END //
DELIMITER ;
এই প্রোসিজারটি status_message আউটপুট প্যারামিটার হিসেবে একটি স্ট্রিং রিটার্ন করবে।
3.2 Calling the Stored Procedure with OUT Parameter in MySQLi
এখন, OUT parameter সহ স্টোরড প্রোসিজার কল করার জন্য কোডটি হবে:
<?php
// Prepare the call statement for stored procedure with OUT parameter
$user_id = 1; // Example user ID
$status_message = "";
// Prepare the statement
$stmt = $conn->prepare("CALL GetUserInfoWithStatus(?, @status_message)");
// Bind the input parameter
$stmt->bind_param("i", $user_id);
// Execute the statement
$stmt->execute();
// Fetch the status message
$result = $conn->query("SELECT @status_message AS status");
$row = $result->fetch_assoc();
$status_message = $row['status'];
// Display the status message
echo "Status: " . $status_message . "<br>";
// Close the prepared statement and connection
$stmt->close();
$conn->close();
?>
এখানে, @status_message হলো একটি ইউজার-ডিফাইনড ভেরিয়েবল, যা MySQL সেশন মধ্যে আউটপুট প্যারামিটার হিসেবে ব্যবহৃত হয়।
সারাংশ
- Stored Procedure হল একটি প্রি-ডিফাইন্ড SQL কোড ব্লক যা পুনরায় ব্যবহারের জন্য ডাটাবেসে সংরক্ষিত থাকে।
- MySQLi দিয়ে stored procedure কল করতে হলে, prepare(), bind_param(), এবং execute() মেথড ব্যবহার করা হয়।
- IN, OUT, এবং INOUT প্যারামিটারগুলি ডেটা প্রেরণ এবং গ্রহণের জন্য ব্যবহৃত হয়।
- Stored Procedures এর মাধ্যমে কোড পুনঃব্যবহারযোগ্য করা যায় এবং এটি ডাটাবেসের পারফরম্যান্স বৃদ্ধি করতে সাহায্য করে।
MySQLi এর মাধ্যমে stored procedure ব্যবহার করে আপনি ডাটাবেসে কার্যক্রম খুবই নিরাপদ ও দক্ষভাবে পরিচালনা করতে পারবেন।
MySQLi Prepared Statements ব্যবহারের সময়, ইনপুট এবং আউটপুট প্যারামিটার ব্যবহার করা হয় কোয়েরি প্রক্রিয়াকে আরও নিরাপদ, কার্যকরী এবং সহজ করার জন্য। ইনপুট প্যারামিটার সাধারণত SQL কোয়েরির জন্য ডেটা সরবরাহ করে এবং আউটপুট প্যারামিটারগুলি কোয়েরি চালানোর পর ফলাফল ফিরিয়ে আনে। MySQLi এর মাধ্যমে আমরা ইনপুট এবং আউটপুট উভয় ধরনের প্যারামিটার ব্যবহার করতে পারি।
1. Input Parameters
Input Parameters হল সেই প্যারামিটার যা আমরা Prepared Statements-এ ডেটাবেসে সংযুক্ত করার জন্য ব্যবহার করি। এগুলি সাধারণত bind_param() ফাংশন ব্যবহার করে বাইন্ড করা হয়। ইনপুট প্যারামিটার একটি SQL কোয়েরি চলানোর সময় ইউজার বা প্রোগ্রাম থেকে প্রাপ্ত ডেটা সরবরাহ করে।
উদাহরণ:
<?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);
}
// Prepared Statement তৈরি
$stmt = $conn->prepare("SELECT name, age FROM users WHERE id = ?");
// ইনপুট প্যারামিটার bind করা
$id = 1; // ইনপুট ডেটা
$stmt->bind_param("i", $id); // "i" মানে integer টাইপ
// কোয়েরি এক্সিকিউট করা
$stmt->execute();
// ফলাফল গ্রহণ করা
$result = $stmt->get_result();
// ফলাফল প্রিন্ট করা
while ($row = $result->fetch_assoc()) {
echo "Name: " . $row['name'] . " - Age: " . $row['age'] . "<br>";
}
// Prepared Statement বন্ধ করা
$stmt->close();
$conn->close();
?>
ব্যাখ্যা:
bind_param("i", $id)ব্যবহার করেidপ্যারামিটার ইনপুট হিসেবে কোয়েরিতে যোগ করা হয়েছে।iএখানে integer টাইপ হিসেবে ব্যবহার করা হয়েছে।
2. Output Parameters
Output Parameters হল সেই প্যারামিটার যেগুলি SQL কোয়েরি এক্সিকিউট করার পর ফলাফল হিসাবে ফিরে আসে। MySQLi এর Prepared Statements-এ আউটপুট প্যারামিটার সরাসরি bind_result() মেথড ব্যবহার করে যুক্ত করা হয়। আউটপুট প্যারামিটার ব্যবহার করে, আপনি কোয়েরির ফলাফলকে পরিবর্তিত বা পুনঃপ্রক্রিয়া করতে পারেন।
উদাহরণ:
<?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);
}
// Prepared Statement তৈরি
$stmt = $conn->prepare("SELECT name, age FROM users WHERE id = ?");
// ইনপুট প্যারামিটার bind করা
$id = 1; // ইনপুট ডেটা
$stmt->bind_param("i", $id);
// আউটপুট প্যারামিটার bind করা
$stmt->bind_result($name, $age); // আউটপুট প্যারামিটার
// কোয়েরি এক্সিকিউট করা
$stmt->execute();
// ফলাফল প্রিন্ট করা
while ($stmt->fetch()) {
echo "Name: " . $name . " - Age: " . $age . "<br>";
}
// Prepared Statement বন্ধ করা
$stmt->close();
$conn->close();
?>
ব্যাখ্যা:
bind_result($name, $age)ব্যবহার করে আউটপুট প্যারামিটার বেঁধে দেয়া হয়েছে, যাতে কোয়েরি এক্সিকিউট হওয়ার পরnameএবংageফলাফল হিসেবে ফিরিয়ে আসে।fetch()মেথড ব্যবহার করে এই আউটপুট প্যারামিটারগুলি রিটার্ন করা হয়।
3. Input এবং Output Parameters একসাথে ব্যবহার
Prepared Statements-এ ইনপুট এবং আউটপুট প্যারামিটার একসাথে ব্যবহার করা যায়, যাতে একাধিক ডেটা একসাথে সন্নিবেশ বা পুনঃপ্রক্রিয়া করা যায়। উদাহরণস্বরূপ, আপনি ডেটাবেস থেকে কিছু ডেটা গ্রহণ করতে পারেন এবং পরে সেই ডেটার সাথে আরও তথ্য আপডেট করতে পারেন।
উদাহরণ:
<?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);
}
// Prepared Statement তৈরি
$stmt = $conn->prepare("SELECT name, age FROM users WHERE id = ?");
// ইনপুট প্যারামিটার bind করা
$id = 1; // ইনপুট ডেটা
$stmt->bind_param("i", $id);
// আউটপুট প্যারামিটার bind করা
$stmt->bind_result($name, $age); // আউটপুট প্যারামিটার
// কোয়েরি এক্সিকিউট করা
$stmt->execute();
// ফলাফল প্রিন্ট করা
while ($stmt->fetch()) {
echo "Name: " . $name . " - Age: " . $age . "<br>";
}
// Update Statement তৈরি
$update_stmt = $conn->prepare("UPDATE users SET age = ? WHERE id = ?");
$new_age = 30;
$update_stmt->bind_param("ii", $new_age, $id);
// কোয়েরি এক্সিকিউট করা
$update_stmt->execute();
echo "Age updated successfully!";
// Prepared Statement বন্ধ করা
$stmt->close();
$update_stmt->close();
$conn->close();
?>
ব্যাখ্যা:
- প্রথমে
SELECTস্টেটমেন্টের মাধ্যমে ইনপুট প্যারামিটার থেকে ডেটা গ্রহণ করা হয়েছে। - তারপর সেই ডেটা ব্যবহার করে
UPDATEস্টেটমেন্টের মাধ্যমে আউটপুট প্যারামিটার আপডেট করা হয়েছে।
সারাংশ
MySQLi Prepared Statements-এ ইনপুট এবং আউটপুট প্যারামিটার ব্যবহারের মাধ্যমে কোড নিরাপদ এবং কার্যকরী হয়। ইনপুট প্যারামিটার ইউজারের ডেটা গ্রহণের জন্য এবং আউটপুট প্যারামিটার কোয়েরি ফলাফল ফিরিয়ে আনার জন্য ব্যবহৃত হয়। এই পদ্ধতিটি SQL ইনজেকশন প্রতিরোধ করে এবং কোয়েরি এক্সিকিউশনের পারফরম্যান্স উন্নত করে।
১. Stored Procedure কী?
Stored Procedure হলো একটি প্রিসেট SQL কোডের সিকোয়েন্স, যা ডেটাবেজ সার্ভারে সংরক্ষিত থাকে এবং বিশেষ একটি কাজ বা ফাংশন সম্পাদন করার জন্য ব্যবহার করা হয়। এটি কোডের পুনঃব্যবহারযোগ্যতা এবং পারফরম্যান্স উন্নত করার জন্য ব্যবহৃত হয়। Stored Procedure ব্যবহার করার ফলে বারবার SQL কুয়েরি লিখতে হয় না এবং একই ফাংশন একাধিকবার ব্যবহার করা সম্ভব হয়।
MySQLi দিয়ে Stored Procedure কল করা সম্ভব এবং এর মাধ্যমে ডেটা উদ্ধার (fetch), আপডেট বা ইনসার্ট করা যায়।
২. MySQLi দিয়ে Stored Procedure কল করা
MySQLi দিয়ে Stored Procedure কল করার জন্য কিছু ধাপ অনুসরণ করতে হয়। নিচে Stored Procedure কল করার ধাপ এবং তার রেজাল্ট হ্যান্ডল করার উদাহরণ দেওয়া হল।
২.১ Stored Procedure তৈরি করা
প্রথমে MySQL ডেটাবেজে একটি Stored Procedure তৈরি করতে হবে। উদাহরণস্বরূপ, একটি Stored Procedure তৈরি করা হলো, যা একটি নির্দিষ্ট id এর ভিত্তিতে ইউজারের নাম ও ইমেইল রিটার্ন করবে।
DELIMITER
DELIMITER ;
এই Stored Procedure GetUserDetails ইউজারের id এর মাধ্যমে তার নাম ও ইমেইল রিটার্ন করবে।
৩. MySQLi দিয়ে Stored Procedure কল করা
MySQLi দিয়ে Stored Procedure কল করার জন্য prepare() মেথড ব্যবহার করা হয় এবং ইনপুট প্যারামিটারগুলো বাইন্ড করা হয়।
৩.১ Procedural Mode দিয়ে Stored Procedure কল করা
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";
// সংযোগ স্থাপন
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Stored Procedure কল করা
$stmt = mysqli_prepare($conn, "CALL GetUserDetails(?)");
// ইনপুট প্যারামিটার বাইন্ড করা
$user_id = 1;
mysqli_stmt_bind_param($stmt, "i", $user_id);
// কুয়েরি এক্সিকিউট করা
mysqli_stmt_execute($stmt);
// রেজাল্ট সেট স্টোর করা
mysqli_stmt_store_result($stmt);
// রেজাল্টের কলাম বাইন্ড করা
mysqli_stmt_bind_result($stmt, $id, $name, $email);
// রেজাল্ট ফেচ করা
while (mysqli_stmt_fetch($stmt)) {
echo "ID: " . $id . " - Name: " . $name . " - Email: " . $email . "<br>";
}
// স্টেটমেন্ট বন্ধ করা
mysqli_stmt_close($stmt);
// সংযোগ বন্ধ করা
mysqli_close($conn);
৩.২ Object-Oriented Mode দিয়ে Stored Procedure কল করা
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";
// Object-oriented সংযোগ
$conn = new mysqli($servername, $username, $password, $dbname);
// Stored Procedure কল করা
$stmt = $conn->prepare("CALL GetUserDetails(?)");
// ইনপুট প্যারামিটার বাইন্ড করা
$stmt->bind_param("i", $user_id);
// প্যারামিটার ইনপুট প্রদান
$user_id = 1;
// কুয়েরি এক্সিকিউট করা
$stmt->execute();
// রেজাল্ট সেট স্টোর করা
$stmt->store_result();
// রেজাল্টের কলাম বাইন্ড করা
$stmt->bind_result($id, $name, $email);
// রেজাল্ট ফেচ করা
while ($stmt->fetch()) {
echo "ID: " . $id . " - Name: " . $name . " - Email: " . $email . "<br>";
}
// স্টেটমেন্ট বন্ধ করা
$stmt->close();
// সংযোগ বন্ধ করা
$conn->close();
৪. Multiple Result Sets (একাধিক রেজাল্ট) হ্যান্ডলিং
যদি Stored Procedure একাধিক রেজাল্ট রিটার্ন করে, তাহলে MySQLi এর মাধ্যমে একাধিক রেজাল্ট হ্যান্ডলিং করার প্রক্রিয়া কিছুটা ভিন্ন। নিচে একটি উদাহরণ দেওয়া হলো, যেখানে দুটি রেজাল্ট সেট রিটার্ন করা হচ্ছে।
৪.১ Multiple Result Sets Handling
$stmt = $conn->prepare("CALL GetMultipleResults()");
// কুয়েরি এক্সিকিউট করা
$stmt->execute();
// প্রথম রেজাল্ট সেট স্টোর করা
$stmt->store_result();
// প্রথম রেজাল্ট বাইন্ড করা
$stmt->bind_result($id, $name);
// প্রথম রেজাল্ট ফেচ করা
while ($stmt->fetch()) {
echo "ID: $id, Name: $name <br>";
}
// দ্বিতীয় রেজাল্ট সেটের জন্য রেজাল্ট পান
$stmt->next_result();
// দ্বিতীয় রেজাল্ট স্টোর করা
$stmt->store_result();
// দ্বিতীয় রেজাল্ট বাইন্ড করা
$stmt->bind_result($email);
// দ্বিতীয় রেজাল্ট ফেচ করা
while ($stmt->fetch()) {
echo "Email: $email <br>";
}
// স্টেটমেন্ট বন্ধ করা
$stmt->close();
এই ক্ষেত্রে, Stored Procedure দুটি আলাদা রেজাল্ট সেট রিটার্ন করবে এবং আমরা next_result() মেথড ব্যবহার করে পরবর্তী রেজাল্ট সেটে প্রবেশ করব।
৫. Output Parameters ব্যবহার
บาง সময় Stored Procedure তে আউটপুট প্যারামিটার (Output Parameters) ব্যবহার করা হয়, যেগুলি স্টোরড প্রসিডিউর সম্পন্ন করার পরে ফিরে আসে। MySQLi এ এটি হ্যান্ডল করতে কিছুটা আলাদা পদ্ধতি রয়েছে।
৫.১ Output Parameters সহ Stored Procedure
DELIMITER
DELIMITER ;
এই Stored Procedure total_count আউটপুট প্যারামিটার হিসেবে ইউজারদের সংখ্যা রিটার্ন করবে।
৫.২ MySQLi দিয়ে Output Parameters Handling
$stmt = $conn->prepare("CALL GetUserCount(?)");
// আউটপুট প্যারামিটার বাইন্ড করা
$stmt->bind_param("i", $total_count);
// কুয়েরি এক্সিকিউট করা
$stmt->execute();
// আউটপুট প্যারামিটার ফেচ করা
$stmt->bind_result($total_count);
$stmt->fetch();
// আউটপুট প্রদর্শন
echo "Total Users: " . $total_count;
// স্টেটমেন্ট বন্ধ করা
$stmt->close();
৬. Prepared Statements এবং Stored Procedures এর সুবিধা
- নিরাপত্তা: SQL ইনজেকশন আক্রমণ থেকে রক্ষা পাওয়ার জন্য Prepared Statements নিরাপদ উপায়।
- পারফরম্যান্স: একবার Stored Procedure তৈরি করলে, তা পুনঃব্যবহার করা যায় এবং বারবার SQL কুয়েরি পাঠানোর প্রয়োজন হয় না।
- কোডের পুনঃব্যবহারযোগ্যতা: Stored Procedure কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করে।
- ডেটাবেজের চাপ কমানো: একাধিক কাজ বা কুয়েরি একত্রে ডেটাবেজে প্রক্রিয়া করা যায়।
MySQLi দিয়ে Stored Procedure এর রেজাল্ট হ্যান্ডলিং করা একটি শক্তিশালী ও নিরাপদ পদ্ধতি। এটি SQL ইনজেকশন প্রতিরোধে সাহায্য করে, পারফরম্যান্সে উন্নতি আনে এবং ডেটাবেজ অপারেশনগুলিকে আরও কার্যকর ও সংগঠিত করে তোলে। MySQLi তে Stored Procedure ব্যবহার করে ডেটা রিট্রিভাল, ইনসার্ট, আপডেট এবং অন্যান্য কমপ্লেক্স অপারেশন খুব সহজে এবং নিরাপদে সম্পন্ন করা যায়।
Read more