Именувани плейсхолдери в PDO в PHP

За удобство може да се използват именувани плейсхолдери, при които редът на следване на променливите в масива няма значение. Нека да видим как се работи с тях.

Нека отново имаме следните променливи:

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

Нека направим SQL заявка, използвайки именувани плейсхолдери. Техният синтаксис е: двоеточие, последвано от името на плейсхолдера. Да използваме ги в заявката:

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

Подготвяме заявката:

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

Изпълняваме заявката, като й подаваме като параметри асоциативен масив, където ключовете са имената на плейсхолдерите в SQL заявката, а стойностите - съответните променливи:

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

Можем да проверим резултата:

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

Нека съберем всичко заедно и получим следния код:

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

Дадена е променлива:

php<?php
  $age = 30;
?>

Намерете всички потребители, чиято възраст е равна на зададената в променливата стойност.

Задание 2

Дадени са променливи:

php<?php
  $age1 = 20;
  $age2 = 30;
?>

Намерете всички потребители, чиято възраст е в диапазона, зададен от стойностите на променливите.

Задание 3

Дадени са променливи:

php<?php
  $age1 = 20;
  $age2 = 30;
  
  $salary1 = 1000;
  $salary2 = 2000;
?>

Намерете всички потребители, чиято възраст И заплата са в диапазона, зададен от стойностите на променливите.