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 ইনজেকশন প্রতিরোধ করে এবং কোয়েরি এক্সিকিউশনের পারফরম্যান্স উন্নত করে।
Read more