PDO তে অবস্থানগত প্লেসহোল্ডারগুলি PHP তে

আসুন বুঝে নেওয়া যাক কিভাবে অবস্থানগত প্লেসহোল্ডারগুলির সাথে কাজ করতে হয়। ধরা যাক আমাদের দুটি ভেরিয়েবল আছে, যেগুলো আমরা ক্যোয়ারীতে ঢোকাতে চাই:

php<?php
  $min = 1;
  $max = 5;
?>

ধরা যাক আমরা আমাদের ভেরিয়েবলগুলি নিম্নলিখিতভাবে ঢোকাতে চাই:

php<?php
  $sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>

যাইহোক, এভাবে করা নিরাপদ নয়। সুতরাং সরাসরি ভেরিয়েবল ঢোকানোর পরিবর্তে, সেগুলোকে অবস্থানগত প্লেসহোল্ডার দিয়ে প্রতিস্থাপন করি, যেগুলো প্রশ্নবোধক চিহ্ন দ্বারা প্রতিনিধিত্ব করা হয়:

php<?php
  $sql = 'SELECT * FROM users WHERE id>? and id<?';
?>

এখন সেই কমান্ডটি এক্সিকিউট করি যা ক্যোয়ারীটিকে প্রস্তুত করবে:

php<?php
  $res = $pdo->prepare($sql);
?>

এখন ক্যোয়ারীটি এক্সিকিউট করি, এটিকে প্যারামিটার হিসেবে আমাদের ভেরিয়েবল ধারণকারী একটি অ্যারে পাস করে। এ ক্ষেত্রে ভেরিয়েবলগুলি ক্যোয়ারীতে সেই অনুক্রমে ঢোকানো হবে, যেভাবে সেগুলো অ্যারেতে উল্লেখ করা হয়েছে:

php<?php
  $res->execute([$min, $max]);
?>

এর পরে আমরা ক্যোয়ারীর ফলাফল পেতে পারি:

php<?php
  while ($row = $res->fetch()) {
    var_dump($row);
  }
?>

সবকিছু একত্রিত করি এবং নিম্নলিখিত কোড পাই:

php<?php
  $min = 1;
  $max = 5;
  
  $sql = 'SELECT * FROM users WHERE id>? and id<?';
  $res = $pdo->prepare($sql);
  
  $res->execute([$min, $max]);
  
  while ($row = $res->fetch()) {
    var_dump($row);
  }
?>
Задание 1

ভেরিয়েবলগুলি দেওয়া আছে:

php<?php
  $age = 30;
  $salary = 1000;
?>

সমস্ত ব্যবহারকারী খুঁজে বের করুন, যাদের বয়স বা বেতন ভেরিয়েবলে প্রদত্ত মানগুলির সমান।

Задание 2

আপনার কোডে একটি SQL-ইনজেকশন চালানোর চেষ্টা করুন। নিশ্চিত হন যে এটি কাজ করবে না।