Stored Procedures হলো MySQL ডেটাবেসে সংরক্ষিত SQL কোড যা একাধিক বার রান করা যায়। এগুলো একটি নির্দিষ্ট কাজ সম্পন্ন করতে সাহায্য করে এবং কার্যকরীভাবে কোড পুনরায় ব্যবহার করা সম্ভব করে। PHP এবং MySQL ব্যবহারের মাধ্যমে, আপনি স্টোরড প্রোসিডিউর তৈরি এবং PHP স্ক্রিপ্টের মাধ্যমে তা কার্যকর করতে পারবেন।
1. Stored Procedure তৈরি করা
MySQL ডেটাবেসে Stored Procedure তৈরি করার জন্য CREATE PROCEDURE কমান্ড ব্যবহার করা হয়। এটি একটি বা একাধিক SQL স্টেটমেন্ট অন্তর্ভুক্ত করতে পারে এবং পরে এটি কল করা যায়।
1.1 Stored Procedure উদাহরণ:
ধরা যাক, আমাদের একটি টেবিল আছে users, যেখানে ব্যবহারকারীদের তথ্য রয়েছে এবং আমরা একটি স্টোরড প্রোসিডিউর তৈরি করতে চাই যা একটি নির্দিষ্ট ব্যবহারকারীর তথ্য ফেরত দিবে।
DELIMITER
DELIMITER ;
এখানে:
- DELIMITER $$: এটি স্টোরড প্রোসিডিউরের মধ্যে SQL কোডের সীমানা চিহ্নিত করতে ব্যবহৃত হয়। ডিফল্ট delimiter হলো
;, তবে আমরা স্টোরড প্রোসিডিউরের মধ্যে এটি পরিবর্তন করি যাতে কোন সমস্যা না হয়। - CREATE PROCEDURE getUserById: এটি একটি স্টোরড প্রোসিডিউর তৈরি করে যা
userIdইনপুট নেয় এবং তারপরusersটেবিল থেকে সেইidএর ব্যবহারকারীর তথ্য ফেরত দেয়। - DELIMITER ;: কোডের শেষে আমরা আবার ডেলিমিটার সঠিক অবস্থায় ফিরিয়ে আনি।
2. PHP দিয়ে Stored Procedure কল করা
PHP স্ক্রিপ্টের মাধ্যমে স্টোরড প্রোসিডিউর কল করা সম্ভব। আমরা mysqli বা PDO ব্যবহার করে এটি করতে পারি। এখানে একটি উদাহরণ দেয়া হলো যা mysqli ব্যবহার করে স্টোরড প্রোসিডিউর কল করবে।
2.1 PHP স্ক্রিপ্ট: Stored Procedure কল করা (mysqli)
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// MySQLi সংযোগ স্থাপন
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Stored Procedure কল করা
if (isset($_POST['submit'])) {
$userId = $_POST['userId'];
// স্টোরড প্রোসিডিউর কল করা
$stmt = $conn->prepare("CALL getUserById(?)");
$stmt->bind_param("i", $userId); // 'i' মানে integer type ইনপুট
$stmt->execute();
$result = $stmt->get_result(); // ফলাফল সংগ্রহ করা
// ফলাফল দেখানো
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["username"]. " - Email: " . $row["email"]. "<br>";
}
} else {
echo "No results found.";
}
$stmt->close();
}
$conn->close();
?>
<!-- HTML ফর্ম -->
<form method="post">
<label for="userId">User ID:</label>
<input type="number" id="userId" name="userId" required>
<button type="submit" name="submit">Get User</button>
</form>
এখানে যা করা হয়েছে:
- MySQLi Connection: প্রথমে MySQLi সংযোগ স্থাপন করা হয়েছে।
- Stored Procedure Call:
prepare()মেথড ব্যবহার করে স্টোরড প্রোসিডিউর কল করা হয়েছে। আমরা bind_param() মেথড ব্যবহার করে ইনপুট প্যারামিটার হিসাবেuserIdপ্রদান করেছি। - Result Handling:
get_result()মেথড ব্যবহার করে স্টোরড প্রোসিডিউরের ফলাফল সংগ্রহ করা হয়েছে এবং তা ব্যবহারকারীর সামনে প্রদর্শন করা হয়েছে।
3. PDO দিয়ে Stored Procedure কল করা
PDO (PHP Data Objects) ব্যবহার করে স্টোরড প্রোসিডিউর কল করার প্রক্রিয়াটি MySQLi থেকে কিছুটা ভিন্ন।
3.1 PHP স্ক্রিপ্ট: Stored Procedure কল করা (PDO)
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "myDB";
// PDO সংযোগ স্থাপন
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// PDO তে exception error mode সেট করা
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Stored Procedure কল করা
if (isset($_POST['submit'])) {
$userId = $_POST['userId'];
// স্টোরড প্রোসিডিউর কল করা
$stmt = $conn->prepare("CALL getUserById(:userId)");
$stmt->bindParam(':userId', $userId, PDO::PARAM_INT);
$stmt->execute();
// ফলাফল দেখানো
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($result) {
foreach ($result as $row) {
echo "ID: " . $row["id"] . " - Name: " . $row["username"] . " - Email: " . $row["email"] . "<br>";
}
} else {
echo "No results found.";
}
}
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
<!-- HTML ফর্ম -->
<form method="post">
<label for="userId">User ID:</label>
<input type="number" id="userId" name="userId" required>
<button type="submit" name="submit">Get User</button>
</form>
এখানে:
- PDO Connection:
new PDO()ব্যবহার করে ডেটাবেসের সাথে সংযোগ স্থাপন করা হয়েছে। - Prepared Statements: স্টোরড প্রোসিডিউর কল করার জন্য prepare() মেথড ব্যবহার করা হয়েছে এবং bindParam() দিয়ে ইনপুট প্যারামিটার প্রদান করা হয়েছে।
- Result Handling:
fetchAll()মেথড ব্যবহার করে স্টোরড প্রোসিডিউরের ফলাফলটি অ্যারে আকারে সংগ্রহ করা হয়েছে।
4. Stored Procedure এর সুবিধা
- কোড পুনঃব্যবহারযোগ্যতা: একবার স্টোরড প্রোসিডিউর তৈরি করার পরে, আপনি এটি বারবার কল করতে পারবেন।
- পারফরমেন্স বৃদ্ধি: স্টোরড প্রোসিডিউরকে একত্রিত SQL স্টেটমেন্টের মাধ্যমে ডেটাবেসে প্রক্রিয়া করা হয়, যা সাধারণ SQL কোয়েরি থেকে দ্রুত হতে পারে।
- সিকিউরিটি: স্টোরড প্রোসিডিউর ব্যবহারের মাধ্যমে SQL ইনজেকশন থেকে রক্ষা পাওয়া যায়, কারণ ইনপুট প্যারামিটার ব্যবহৃত হয়।
5. উপসংহার
এটি ছিল MySQL তে Stored Procedures তৈরি এবং PHP দিয়ে তা সংযোগ করার প্রক্রিয়া। স্টোরড প্রোসিডিউর ব্যবহারের মাধ্যমে আপনি ডেটাবেস অপারেশনগুলোকে আরো কার্যকরী, নিরাপদ এবং পুনঃব্যবহারযোগ্য করে তুলতে পারবেন। PHP ব্যবহার করে আমরা স্টোরড প্রোসিডিউরকে MySQLi এবং PDO উভয়ের মাধ্যমেই কার্যকরী করতে পারি।
Read more