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 इंजेक्शन लगाने का प्रयास करें। सुनिश्चित करें कि यह सफल नहीं होगा।