MySQLi ব্যবহার করে Stored Procedures এবং Transactions পরিচালনা করা হয় ডেটাবেসের কার্যক্রমগুলোকে আরও কার্যকরী, সুরক্ষিত এবং দক্ষভাবে পরিচালনা করার জন্য।
- Stored Procedure একটি প্রি-ডিফাইন্ড SQL কোডের সিকোয়েন্স যা ডেটাবেসে সংরক্ষিত থাকে এবং যখন প্রয়োজন হয়, তখন এটি একাধিক কুয়েরি বা লজিক এক্সিকিউট করার জন্য কল করা যায়।
- Transaction হল একটি সিকোয়েন্সিয়াল অপারেশন যা এক বা একাধিক SQL কুয়েরি অন্তর্ভুক্ত করে এবং শুধুমাত্র সব কুয়েরি সফল হলে তা ডেটাবেসে কমিট করা হয়। যদি কোন একটি কুয়েরি ব্যর্থ হয়, তবে সমস্ত অপারেশন রোলব্যাক করা হয়।
1. Stored Procedure তৈরি এবং কল করা (MySQLi)
Stored Procedure তৈরি করা হয় এবং তারপর MySQLi দিয়ে এটি কল করা হয়। নিচে একটি উদাহরণ দেওয়া হলো যেখানে একটি stored procedure তৈরি করা হয়েছে এবং তারপর PHP ব্যবহার করে এটি কল করা হয়েছে।
1.1 Stored Procedure তৈরি করা:
এখানে একটি সিম্পল Stored Procedure তৈরি করা হচ্ছে যা একটি টেবিল থেকে নির্দিষ্ট নামের ইউজারের তথ্য রিট্রিভ করবে।
DELIMITER
DELIMITER ;
বিশদ ব্যাখ্যা:
DELIMITER $$ব্যবহার করা হয় কারণ MySQLে;একটি স্ট্যান্ডার্ড স্টেটমেন্ট ডিলিমিটার, কিন্তু stored procedure এর মধ্যে;ব্যবহার করা হয়, তাই ডিলিমিটার পরিবর্তন করতে হয়।CREATE PROCEDUREস্টেটমেন্ট ব্যবহার করে stored procedure তৈরি করা হয়।
1.2 Stored Procedure কল করা (PHP MySQLi):
PHP স্ক্রিপ্ট ব্যবহার করে এই stored procedure কল করা হবে:
<?php
// MySQLi সংযোগ তৈরি
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
// সংযোগ তৈরি করা
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ সফল কিনা তা যাচাই করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Stored Procedure কল করা
$stmt = $conn->prepare("CALL GetUserByName(?)");
$stmt->bind_param("s", $name);
// নামের ভ্যালু সেট করা
$name = "John Doe";
// স্টেটমেন্ট এক্সিকিউট করা
$stmt->execute();
// রেজাল্ট সেট করা
$result = $stmt->get_result();
// রেজাল্ট প্রিন্ট করা
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row['id'] . " - Name: " . $row['name'] . "<br>";
}
// সংযোগ বন্ধ করা
$stmt->close();
$conn->close();
?>
বিশদ ব্যাখ্যা:
prepare()মেথডের মাধ্যমে stored procedure কল করা হয়।bind_param()ব্যবহার করে input parameter (username) এর জন্য ডেটা ব্যাইন্ড করা হয়।execute()মেথড কল করে stored procedure এক্সিকিউট করা হয়।
2. Transaction ব্যবহার (MySQLi)
Transaction ব্যবহারের মাধ্যমে একাধিক SQL কুয়েরি একসাথে কার্যকরীভাবে পরিচালনা করা যায়। যদি একটি কুয়েরি ব্যর্থ হয়, তাহলে পুরো ট্রানজ্যাকশন রোলব্যাক করা যায়।
2.1 Transaction কোড উদাহরণ:
এখানে দুটি টেবিল (যেমন accounts এবং transactions) আপডেট করার জন্য একটি ট্রানজ্যাকশন ব্যবহার করা হচ্ছে। যদি কোন একটিও কুয়েরি ব্যর্থ হয়, তবে সমস্ত পরিবর্তন রোলব্যাক হয়ে যাবে।
<?php
// MySQLi সংযোগ তৈরি
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
// সংযোগ তৈরি করা
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ সফল কিনা তা যাচাই করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// ট্রানজ্যাকশন শুরু করা
$conn->begin_transaction();
try {
// প্রথম কুয়েরি: একাউন্ট থেকে টাকা কাটা
$stmt1 = $conn->prepare("UPDATE accounts SET balance = balance - 500 WHERE account_id = ?");
$stmt1->bind_param("i", $accountId1);
$accountId1 = 1;
$stmt1->execute();
// দ্বিতীয় কুয়েরি: অন্য একাউন্টে টাকা জমা
$stmt2 = $conn->prepare("UPDATE accounts SET balance = balance + 500 WHERE account_id = ?");
$stmt2->bind_param("i", $accountId2);
$accountId2 = 2;
$stmt2->execute();
// টেবিলে একটি ট্রানজেকশন রেকর্ড যোগ করা
$stmt3 = $conn->prepare("INSERT INTO transactions (from_account, to_account, amount) VALUES (?, ?, ?)");
$stmt3->bind_param("iii", $accountId1, $accountId2, $amount);
$amount = 500;
$stmt3->execute();
// সবকিছু সফল হলে কমিট করা
$conn->commit();
echo "Transaction completed successfully!";
} catch (Exception $e) {
// কোন সমস্যা হলে রোলব্যাক করা
$conn->rollback();
echo "Transaction failed: " . $e->getMessage();
}
// সংযোগ বন্ধ করা
$stmt1->close();
$stmt2->close();
$stmt3->close();
$conn->close();
?>
বিশদ ব্যাখ্যা:
begin_transaction()মেথড দিয়ে ট্রানজ্যাকশন শুরু হয়।- ট্রানজ্যাকশনের মধ্যে একাধিক SQL কুয়েরি এক্সিকিউট করা হয়।
- যদি সব কুয়েরি সফল হয়, তবে
commit()মেথড দিয়ে ট্রানজ্যাকশন কমিট করা হয়, অর্থাৎ সমস্ত পরিবর্তন ডেটাবেসে সেভ হয়। - যদি কোনো এক কুয়েরি ব্যর্থ হয়, তাহলে
rollback()মেথড দিয়ে সমস্ত পরিবর্তন রোলব্যাক করা হয়।
উপসংহার
- Stored Procedures এবং Transactions MySQLi এবং PHP এর মাধ্যমে ডেটাবেস অপারেশনগুলোকে আরও সুরক্ষিত এবং কার্যকরী করে তোলে।
- Stored Procedures ব্যবহার করলে কোড পুনঃব্যবহারযোগ্য হয় এবং ডেটাবেসের পারফরম্যান্স বৃদ্ধি পায়, কারণ সার্ভার সাইডে লজিক এক্সিকিউট করা হয়।
- Transactions ব্যবহার করা হলে, ডেটাবেসে একাধিক অপারেশন একত্রে সম্পন্ন হয় এবং কোনো একটি অপারেশন ব্যর্থ হলে সমস্ত অপারেশন রোলব্যাক করা হয়, যা ডেটাবেসের ডাটা ইন্টিগ্রিটি বজায় রাখে।
Read more