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 ব্যবহার করে আপনি ডাটাবেসে কার্যক্রম খুবই নিরাপদ ও দক্ষভাবে পরিচালনা করতে পারবেন।
Read more