PHP да PDO да позицияга асосланган плейсхолдерлар

Позицияга асосланган плейсхолдерлар билан қандай ишлашни кўриб чиқайлик. Фарз қилайлик, бизда сўровга қўшмоқчи бўлган икки та ўзгарувчи мавжуд:

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-инъекция қилиб кўринг. У амалга ошмаслига ишонч ҳосил қилинг.