პოზიციური პლეისჰოლდერები 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-ინექციის ჩატარება თქვენს კოდში. დარწმუნდით, რომ ის არ იმუშავებს.