PDO-дағы позициялық плейсхолдерлер PHP-те
Позициялық плейсхолдерлермен қалай жұмыс істеу керектігін қарастырайық. Бізде сұрауға енгізгіміз келетін екі айнымалы бар делік:
<?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-инъекция жасауға тырысыңыз. Оның өтпейтініне көз жеткізіңіз.