PHP да PDO да позицияга асосланган плейсхолдерлар
Позицияга асосланган плейсхолдерлар билан қандай ишлашни кўриб чиқайлик. Фарз қилайлик, бизда сўровга қўшмоқчи бўлган икки та ўзгарувчи мавжуд:
<?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-инъекция қилиб кўринг. У амалга ошмаслига ишонч ҳосил қилинг.