Trình giữ chỗ theo vị trí trong PDO của PHP
Hãy cùng tìm hiểu cách làm việc với các trình giữ chỗ theo vị trí. Giả sử chúng ta có hai biến, mà chúng ta muốn chèn vào truy vấn:
<?php
$min = 1;
$max = 5;
?>
Giả sử chúng ta muốn chèn các biến của mình theo cách sau:
<?php
$sql = "SELECT * FROM users WHERE id>$min and id<$max";
?>
Tuy nhiên, làm như vậy không an toàn. Vì vậy, thay vì chèn trực tiếp các biến, hãy thay thế chúng bằng các trình giữ chỗ theo vị trí, được biểu thị bằng dấu chấm hỏi:
<?php
$sql = 'SELECT * FROM users WHERE id>? and id<?';
?>
Bây giờ hãy thực thi lệnh chuẩn bị truy vấn:
<?php
$res = $pdo->prepare($sql);
?>
Bây giờ hãy thực thi truy vấn, truyền cho nó tham số là một mảng chứa các biến của chúng ta. Trong trường hợp này các biến sẽ được chèn vào truy vấn theo đúng thứ tự mà chúng được chỉ định trong mảng:
<?php
$res->execute([$min, $max]);
?>
Sau đó chúng ta có thể nhận được kết quả truy vấn:
<?php
while ($row = $res->fetch()) {
var_dump($row);
}
?>
Tổng hợp tất cả lại, chúng ta sẽ có đoạn mã sau:
<?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);
}
?>
Cho các biến:
<?php
$age = 30;
$salary = 1000;
?>
Tìm tất cả người dùng, mà tuổi hoặc mức lương bằng với giá trị đã cho trong các biến.
Hãy thử thực hiện một cuộc tấn công SQL injection vào mã của bạn. Hãy chắc chắn rằng nó sẽ không thành công.