PHP MySQL Prepared Statements: একটি বিস্তারিত গাইড
আমরা এখানে PHP এবং MySQL এর সাথে **Prepared Statements** এর ব্যবহার সম্পর্কে বিস্তারিতভাবে শিখবো। এটি সাধারণ SQL statements এর তুলনায় অনেক সিকিউর এবং কার্যকরী।
Prepared Statements ব্যবহার করে আমরা SQL ইনজেকশন (SQL Injection) রোধ করতে পারি এবং একই কোড বারবার ব্যবহার করতে পারি যা কোডের কার্যকারিতা বৃদ্ধি করে।
✅ কেন Prepared Statements ব্যবহার করবেন?
- SQL Injection থেকে সুরক্ষা নিশ্চিত করা যায়।
- ডাটাবেজ অপারেশন সহজ এবং দ্রুত হয়।
- কোড পুনঃব্যবহারযোগ্য হয়।
- ডাটাবেজের সাথে নিরাপদ যোগাযোগ বজায় থাকে।
✅ Code Breakdown: Insert Example (Prepared Statement)
এখানে আমরা দেখবো কিভাবে ডাটা MySQL ডাটাবেজে Insert করতে হয় Prepared Statement ব্যবহার করে:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";
// কানেকশন তৈরি
$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);
// ডাটা সেট
$name = "Alice";
$email = "alice@example.com";
$stmt->execute(); // এক্সিকিউট করা
$name = "Bob";
$email = "bob@example.com";
$stmt->execute(); // দ্বিতীয় এক্সিকিউশন
echo "Records successfully inserted!";
// Statement বন্ধ করা
$stmt->close();
// কানেকশন বন্ধ করা
$conn->close();
?>
Output:
| Message |
|---|
| Records successfully inserted! |
✅ Code Breakdown (In Detail)
1. Database Connection:
প্রথমে আমরা MySQL ডাটাবেজের সাথে কানেক্ট করতে একটি mysqli অবজেক্ট তৈরি করি। এটি করার জন্য আমরা servername, username, password, এবং dbname ব্যবহার করি।
$conn = new mysqli($servername, $username, $password, $dbname);
2. Error Handling:
কানেকশন সফল না হলে, আমরা একটি die() ফাংশন ব্যবহার করে স্ক্রিপ্ট বন্ধ করি এবং একটি ত্রুটি বার্তা প্রদর্শন করি।
if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
3. Prepared Statement Creation:
এখানে আমরা prepare() ফাংশন ব্যবহার করি একটি INSERT SQL statement তৈরি করতে যা name এবং email এর জন্য placeholder হিসেবে (?) ব্যবহার করবে।
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
4. Binding Parameters:
এই পর্যায়ে bind_param() ফাংশন দিয়ে আমরা PHP ভেরিয়েবলগুলোকে SQL statement এর parameter হিসেবে বাইন্ড করি।
$stmt->bind_param("ss", $name, $email);
এখানে “ss” মানে হচ্ছে: প্রথম s হল string এর জন্য এবং দ্বিতীয় s হল আবার string এর জন্য।
5. Executing the Statement:
প্রত্যেকবার যখন ডাটা ইনসার্ট করতে চাই, তখন execute() ফাংশন কল করি।
$stmt->execute();
6. Closing the Statement and Connection:
শেষে, close() ফাংশন ব্যবহার করে স্টেটমেন্ট এবং কানেকশন বন্ধ করে দেওয়া হয়।
$stmt->close();
$conn->close();
✅ MySQL Select with Prepared Statements
এবার আমরা দেখবো কিভাবে SELECT ব্যবহার করা যায় Prepared Statements দিয়ে:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "testdb";
// কানেকশন তৈরি
$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);
// ডাটা সেট
$email = "alice@example.com";
$stmt->execute();
// রেজাল্ট ফেচ করা
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"] . " - Name: " . $row["name"] . " - Email: " . $row["email"] . "<br>";
}
$stmt->close();
$conn->close();
?>
Output:
| ID | Name | |
|---|---|---|
| 1 | Alice | alice@example.com |