Prepared Statements কি?
Prepared Statements একটি পদ্ধতি, যা SQL ইনজেকশন (SQL Injection) থেকে রক্ষা করতে সাহায্য করে এবং ডেটাবেসে কার্যকরী কোয়েরি (query) পাঠানোর একটি নিরাপদ উপায়। এই পদ্ধতিতে, কোয়েরি আগে থেকে প্রস্তুত করা হয় এবং তারপর সেটি চলানোর সময় ডাইনামিক ডেটা যুক্ত করা হয়। এর মাধ্যমে, SQL কোয়েরির কাঠামো এবং মানগুলি পৃথকভাবে পরিচালিত হয়, যা SQL ইনজেকশনের ঝুঁকি কমায়।
Prepared Statements ব্যবহার করা
পিএইচপি (PHP) এবং মাইএসকিউএল (MySQL) এর মধ্যে Prepared Statements ব্যবহার করতে হলে, দুটি প্রধান ধাপ অনুসরণ করতে হয়:
- SQL Statement প্রস্তুত করা
- Statement এ ডেটা বাউন্ড করা (Binding Data)
1. SQL Statement প্রস্তুত করা
প্রথমে, ডাটাবেস কানেকশন তৈরি করতে হবে। এরপর একটি SQL স্টেটমেন্ট তৈরি করতে হবে, যেখানে ব্যবহারকারীর ইনপুটকে একটি প্লেসহোল্ডারের মাধ্যমে নিরাপদভাবে হ্যান্ডল করা হবে। পিএইচপি মাইএসকিউএল (PHP MySQL) ব্যবহার করে Prepared Statement তৈরি করা হয় prepare() ফাংশনের মাধ্যমে।
<?php
// ডাটাবেস কানেকশন তৈরি করা
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
// কানেকশন তৈরি করা
$conn = new mysqli($servername, $username, $password, $dbname);
// কানেকশন চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL কোয়েরি প্রস্তুত করা (প্রস্তুত অবস্থায়)
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
?>
এখানে, ? হল একটি প্লেসহোল্ডার, যা পরে ডাইনামিক ডেটা দ্বারা প্রতিস্থাপিত হবে।
2. Statement এ ডেটা বাউন্ড করা
Prepared Statement তৈরি করার পর, ব্যবহারকারীর ইনপুট (যেমন: username) এতে বাউন্ড (bind) করতে হবে। এর জন্য bind_param() মেথড ব্যবহার করা হয়।
<?php
// ব্যবহারকারীর ইনপুট
$username = "john_doe";
// ডেটা বাউন্ড করা
$stmt->bind_param("s", $username); // 's' মানে string ডেটা টাইপ
// কোয়েরি এক্সিকিউট করা
$stmt->execute();
// ফলাফল গ্রহণ করা
$result = $stmt->get_result();
// রেজাল্ট প্রদর্শন
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row['id'] . " - Name: " . $row['username'] . "<br>";
}
// কানেকশন বন্ধ করা
$stmt->close();
$conn->close();
?>
এখানে, bind_param("s", $username) দিয়ে username ভ্যালুকে স্ট্রিং (string) হিসেবে বাউন্ড করা হয়েছে। "s" মানে হলো যে ডেটা টাইপটি একটি স্ট্রিং (string)।
Prepared Statements এর সুবিধা
- SQL ইনজেকশন প্রতিরোধ: Prepared Statements ব্যবহার করার মাধ্যমে SQL ইনজেকশন রোধ করা যায়, কারণ ব্যবহারকারীর ইনপুট কোয়েরির কাঠামো পরিবর্তন করতে পারে না।
- দ্রুত পারফরম্যান্স: একাধিক এক্সিকিউশন একেই SQL স্টেটমেন্ট ব্যবহার করে হওয়ায়, সার্ভারের পক্ষে কোয়েরি প্রসেসিং দ্রুত হয়।
- কোড রিডেবিলিটি: কোডটি আরও পরিষ্কার এবং সহজে রক্ষণাবেক্ষণযোগ্য হয়।
Prepared Statements ব্যবহার করা পিএইচপি ও মাইএসকিউএল ডেটাবেস অ্যাপ্লিকেশনকে আরও নিরাপদ ও কার্যকরী করে তোলে।
Read more