Prepared Statements এর ব্যবহার

ডেটাবেজ সংযোগ এবং ম্যানেজমেন্ট - মাইএসকিউএল আই (MySQLi) - Database Tutorials

303

Prepared Statements হল একটি নিরাপদ এবং কার্যকরী পদ্ধতি যেটি ডেটাবেসে SQL কুয়েরি কার্যকর করার জন্য ব্যবহৃত হয়। এটি SQL ইনজেকশন (SQL Injection) প্রতিরোধে অত্যন্ত কার্যকর এবং ডেটাবেসের পারফরম্যান্সও উন্নত করতে সহায়ক। MySQLi (MySQL Improved) এক্সটেনশনে Prepared Statements ব্যবহার করে আপনি ডেটাবেসের সঙ্গে নিরাপদ ও দক্ষভাবে ইন্টারঅ্যাক্ট করতে পারেন।


Prepared Statement কী?

Prepared Statement হল এমন একটি SQL কুয়েরি যা pre-compiled হয়। এতে কুয়েরি প্রথমে কম্পাইল হয় এবং তারপরে কেবল ডেটা সাবমিট করা হয়। এইভাবে, কুয়েরি তৈরি এবং এক্সিকিউট করার সময় ভ্যালিডেশন এবং প্যারামিটার প্লেসহোল্ডার ব্যবহার করা যায়, যা SQL ইনজেকশন থেকে রক্ষা করে।

Prepared Statements ব্যবহারের মূল সুবিধাগুলি হল:

  • SQL ইনজেকশন প্রতিরোধ।
  • একই কুয়েরি একাধিকবার চালানোর ক্ষেত্রে পারফরম্যান্স বৃদ্ধি।
  • কোড রিডেবিলিটি এবং রক্ষণাবেক্ষণ সহজ হয়।

MySQLi তে Prepared Statements ব্যবহার

MySQLi তে Prepared Statements ব্যবহার করার দুটি প্রধান পদ্ধতি রয়েছে: Object-Oriented এবং Procedural

১. Object-Oriented পদ্ধতিতে Prepared Statement ব্যবহার

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// MySQLi connection তৈরি
$conn = new mysqli($servername, $username, $password, $dbname);

// সংযোগ চেক
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Prepared Statement তৈরি
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");

// প্যারামিটার বाइন্ড করা
$stmt->bind_param("ss", $name, $email);  // "ss" মানে দুটি স্ট্রিং

// ডেটা ইনসার্ট করা
$name = "John Doe";
$email = "john@example.com";
$stmt->execute();

// সফল ইনসার্ট হলে মেসেজ দেখানো
echo "New record created successfully";

// স্টেটমেন্ট এবং কানেকশন বন্ধ করা
$stmt->close();
$conn->close();
?>

ব্যাখ্যা:

  • prepare() মেথডটি SQL কুয়েরি তৈরি করে।
  • bind_param() মেথডের মাধ্যমে প্লেসহোল্ডারগুলোর জন্য ভ্যালু বেঁধে দেয়া হয়। এখানে, "ss" এর মানে হল যে দুটি স্ট্রিং প্যারামিটার।
  • execute() মেথডটি কুয়েরি এক্সিকিউট করে ডেটাবেসে ডেটা ইনসার্ট করে।

২. Procedural পদ্ধতিতে Prepared Statement ব্যবহার

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// MySQLi connection তৈরি
$conn = mysqli_connect($servername, $username, $password, $dbname);

// সংযোগ চেক
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// Prepared Statement তৈরি
$stmt = mysqli_prepare($conn, "INSERT INTO users (name, email) VALUES (?, ?)");

// প্যারামিটার বাইন্ড করা
mysqli_stmt_bind_param($stmt, "ss", $name, $email);  // "ss" মানে দুটি স্ট্রিং

// ডেটা ইনসার্ট করা
$name = "Jane Doe";
$email = "jane@example.com";
mysqli_stmt_execute($stmt);

// সফল ইনসার্ট হলে মেসেজ দেখানো
echo "New record created successfully";

// স্টেটমেন্ট এবং কানেকশন বন্ধ করা
mysqli_stmt_close($stmt);
mysqli_close($conn);
?>

ব্যাখ্যা:

  • mysqli_prepare() মেথডটি SQL কুয়েরি প্রস্তুত করে।
  • mysqli_stmt_bind_param() প্যারামিটার বাইন্ড করে। "ss" দ্বারা দুটি স্ট্রিং প্যারামিটারকে চিহ্নিত করা হয়েছে।
  • mysqli_stmt_execute() কুয়েরিটি এক্সিকিউট করে ডেটাবেসে ডেটা ইনসার্ট করে।

Prepared Statements এর মাধ্যমে ডেটা রিড করা

প্রিপেয়ারড স্টেটমেন্ট শুধু ইনসার্টের জন্য নয়, ডেটা রিডের জন্যও ব্যবহার করা যেতে পারে।

১. Object-Oriented পদ্ধতিতে ডেটা রিড করা

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// MySQLi connection তৈরি
$conn = new mysqli($servername, $username, $password, $dbname);

// সংযোগ চেক
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

// Prepared Statement তৈরি
$stmt = $conn->prepare("SELECT id, name, email FROM users WHERE email = ?");

// প্যারামিটার বাইন্ড করা
$stmt->bind_param("s", $email);  // "s" মানে একটি স্ট্রিং

// প্যারামিটার সেট করা এবং কুয়েরি এক্সিকিউট করা
$email = "john@example.com";
$stmt->execute();

// রেজাল্ট ফেচ করা
$stmt->bind_result($id, $name, $email);

// রেকর্ডগুলি একে একে দেখানো
while ($stmt->fetch()) {
    echo "ID: $id, Name: $name, Email: $email<br>";
}

// স্টেটমেন্ট এবং কানেকশন বন্ধ করা
$stmt->close();
$conn->close();
?>

২. Procedural পদ্ধতিতে ডেটা রিড করা

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";

// MySQLi connection তৈরি
$conn = mysqli_connect($servername, $username, $password, $dbname);

// সংযোগ চেক
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// Prepared Statement তৈরি
$stmt = mysqli_prepare($conn, "SELECT id, name, email FROM users WHERE email = ?");

// প্যারামিটার বাইন্ড করা
mysqli_stmt_bind_param($stmt, "s", $email);  // "s" মানে একটি স্ট্রিং

// প্যারামিটার সেট করা এবং কুয়েরি এক্সিকিউট করা
$email = "john@example.com";
mysqli_stmt_execute($stmt);

// রেজাল্ট ফেচ করা
mysqli_stmt_bind_result($stmt, $id, $name, $email);

// রেকর্ডগুলি একে একে দেখানো
while (mysqli_stmt_fetch($stmt)) {
    echo "ID: $id, Name: $name, Email: $email<br>";
}

// স্টেটমেন্ট এবং কানেকশন বন্ধ করা
mysqli_stmt_close($stmt);
mysqli_close($conn);
?>

Prepared Statements এর সুবিধা

  1. SQL ইনজেকশন প্রতিরোধ: Prepared Statements ব্যবহার করলে, প্যারামিটারগুলি ডেটাবেসে সরাসরি ইনপুট হিসেবে ব্যবহৃত হয়, যেটি SQL ইনজেকশন আক্রমণ থেকে রক্ষা করে।
  2. পারফরম্যান্স উন্নতি: একাধিকবার একই কুয়েরি চালানোর সময় Prepared Statements সিস্টেমকে কোড কম্পাইল করতে বাধ্য করে না, ফলে পারফরম্যান্সের উন্নতি ঘটে।
  3. কোড রিডেবিলিটি: SQL কুয়েরি এবং প্যারামিটার আলাদা হয়ে যাওয়ায় কোড সহজে পড়া যায় এবং বুঝতে সুবিধা হয়।

সারাংশ

MySQLi তে Prepared Statements ব্যবহার করার মাধ্যমে আপনি নিরাপদ এবং দক্ষভাবে SQL কুয়েরি পরিচালনা করতে পারেন। এটি SQL ইনজেকশন প্রতিরোধে সহায়তা করে এবং ডেটাবেসের পারফরম্যান্স উন্নত করে। Prepared Statements ব্যবহারে ডেটাবেসে ডেটা ইনসার্ট এবং রিড করার পদ্ধতি অনেক সহজ এবং নিরাপদ হয়ে ওঠে।

Content added By
Promotion

Are you sure to start over?

Loading...