PDO তে অবস্থানগত প্লেসহোল্ডারগুলি PHP তে
আসুন বুঝে নেওয়া যাক কিভাবে অবস্থানগত প্লেসহোল্ডারগুলির সাথে কাজ করতে হয়। ধরা যাক আমাদের দুটি ভেরিয়েবল আছে, যেগুলো আমরা ক্যোয়ারীতে ঢোকাতে চাই:
<?php
$min = 1;
$max = 5;
?>
ধরা যাক আমরা আমাদের ভেরিয়েবলগুলি নিম্নলিখিতভাবে ঢোকাতে চাই:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
যাইহোক, এভাবে করা নিরাপদ নয়। সুতরাং সরাসরি ভেরিয়েবল ঢোকানোর পরিবর্তে, সেগুলোকে অবস্থানগত প্লেসহোল্ডার দিয়ে প্রতিস্থাপন করি, যেগুলো প্রশ্নবোধক চিহ্ন দ্বারা প্রতিনিধিত্ব করা হয়:
<?php
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
এখন সেই কমান্ডটি এক্সিকিউট করি যা ক্যোয়ারীটিকে প্রস্তুত করবে:
<?php
$res = $pdo->prepare($sql);
?>
এখন ক্যোয়ারীটি এক্সিকিউট করি, এটিকে প্যারামিটার হিসেবে আমাদের ভেরিয়েবল ধারণকারী একটি অ্যারে পাস করে। এ ক্ষেত্রে ভেরিয়েবলগুলি ক্যোয়ারীতে সেই অনুক্রমে ঢোকানো হবে, যেভাবে সেগুলো অ্যারেতে উল্লেখ করা হয়েছে:
<?php
$res->execute([$min, $max]);
?>
এর পরে আমরা ক্যোয়ারীর ফলাফল পেতে পারি:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
সবকিছু একত্রিত করি এবং নিম্নলিখিত কোড পাই:
<?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);
}
?>
ভেরিয়েবলগুলি দেওয়া আছে:
<?php
$age = 30;
$salary = 1000;
?>
সমস্ত ব্যবহারকারী খুঁজে বের করুন, যাদের বয়স বা বেতন ভেরিয়েবলে প্রদত্ত মানগুলির সমান।
আপনার কোডে একটি SQL-ইনজেকশন চালানোর চেষ্টা করুন। নিশ্চিত হন যে এটি কাজ করবে না।