(আগের পাঠের) একটি কানেকশন খোলা থাকলে, PDO SQL DML পাঠ থেকে ইতিমধ্যে জানা যেকোনো SQL চালাতে পারে — SELECT, INSERT, UPDATE, DELETE — সবই PHP থেকে একইভাবে কাজ করে।
<?php
$stmt = $pdo->query("SELECT name, course FROM students");
$students = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($students as $student) {
echo $student["name"] . " — " . $student["course"] . "\n";
}
?>fetchAll(PDO::FETCH_ASSOC) ঠিক সেই আকৃতিই রিটার্ন করে যা আপনি Associative Arrays পাঠে দেখেছেন — অ্যাসোসিয়েটিভ অ্যারের একটি অ্যারে, প্রতি সারিতে একটি, কলামের নাম দিয়ে key করা।
কখনো সরাসরি একটি ভ্যারিয়েবল SQL স্ট্রিং-এ জোড়া লাগিয়ে একটি কোয়েরি তৈরি করবেন না। একটি prepared statement কোয়েরি আর ডেটা আলাদাভাবে পাঠায়, যাতে ডেটাবেস কখনো "ডেটা"-কে "SQL কোড"-এর সাথে গুলিয়ে না ফেলে — এই পুরো পাঠের সবচেয়ে গুরুত্বপূর্ণ একক সিকিউরিটি অনুশীলন এটাই।
<?php
// NEVER do this:
// $stmt = $pdo->query("SELECT * FROM students WHERE name = '$name'");
// Do this instead:
$stmt = $pdo->prepare("SELECT * FROM students WHERE name = ?");
$stmt->execute([$name]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
?>এটি ঐচ্ছিক নয়
একটি ভ্যারিয়েবল সরাসরি একটি SQL স্ট্রিংয়ে জোড়া লাগালে SQL injection-এর দরজা খুলে যায় — একজন visitor একটি ফর্ম ফিল্ডে anything' OR '1'='1-এর মতো কিছু টাইপ করলে আপনার কোয়েরির লজিক সম্পূর্ণভাবে পুনর্লিখন করে ফেলতে পারে, সম্ভবত এমন ডেটা পড়তে বা মুছে ফেলতে পারে যা তাদের কখনো ছোঁয়ার কথা ছিল না। Prepared statement এটা পুরোপুরি বন্ধ করে দেয়, কারণ ডেটাবেস ইঞ্জিন নিজেই ডেটা আর কোডকে আলাদা রাখে — এটা মুখস্থ করে "সহজ ক্ষেত্রে" বাদ দেওয়ার মতো কিছু নয়।
<?php
// INSERT
$stmt = $pdo->prepare("INSERT INTO students (name, course) VALUES (?, ?)");
$stmt->execute(["Priya", "Web Development"]);
// UPDATE
$stmt = $pdo->prepare("UPDATE students SET course = ? WHERE name = ?");
$stmt->execute(["Graphic Design", "Priya"]);
// DELETE
$stmt = $pdo->prepare("DELETE FROM students WHERE name = ?");
$stmt->execute(["Priya"]);
?>? প্লেসহোল্ডারগুলো execute()-এ পাস করা অ্যারে দিয়ে, ক্রম অনুযায়ী পূরণ হয় — নামযুক্ত প্লেসহোল্ডার (?-এর বদলে :name)-ও পাওয়া যায়, আর একটি কোয়েরিতে বেশ কয়েকটি প্যারামিটার থাকলে বেশি পরিষ্কারভাবে পড়া যায়।
এই পাঠটি এই সাইটের বাকি সবকিছুর সাথে সংযুক্ত করে PHP অংশটি শেষ করছে: আপনার ইতিমধ্যে জানা HTML পাতাটি রেন্ডার করে, এই অংশের PHP সিদ্ধান্ত নেয় তাতে কোন ডেটা যাবে, আর SQL অংশ হলো PHP একটি কোয়েরি হাতে দেওয়ার পর একটি ডেটাবেসকে যা করতে বলা যায় তার সম্পূর্ণ রেফারেন্স। এখান থেকে, ব্যবহারিক পরের ধাপ হলো একটি ছোট বাস্তব প্রজেক্ট — একটি গেস্টবুক, একটি ডেটাবেসে সংরক্ষিত একটি সাধারণ to-do তালিকা — যা এই সবকিছু একসাথে ব্যবহার করে।