ตัวยึดตำแหน่งใน 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 injection ลงใน โค้ดของคุณ ตรวจสอบให้แน่ใจว่ามันจะไม่ผ่าน