ตัวยึดตำแหน่งใน PDO ของ PHP

มาดูกันว่าเราจะทำงานกับตัวยึดตำแหน่งได้อย่างไร สมมติเรามีตัวแปรสองตัว ที่เราต้องการใส่ลงในคำสั่งค้นหา:

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

สมมติว่าเราต้องการใส่ตัวแปรของเรา ดังต่อไปนี้:

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

อย่างไรก็ตาม การทำแบบนี้ไม่ปลอดภัย ดังนั้นแทนที่จะใส่ตัวแปร โดยตรง เราจะแทนที่ด้วยตัวยึดตำแหน่ง ซึ่งเป็นเครื่องหมายคำถาม:

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

ตอนนี้เรามาเรียกใช้คำสั่งซึ่ง จะเตรียม คำสั่งค้นหา:

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

ตอนนี้เรามาเรียกใช้คำสั่งค้นหา โดยส่งพารามิเตอร์เป็น อาร์เรย์ที่บรรจุตัวแปรของเรา ในกรณีนี้ ตัวแปรจะถูกใส่ลงในคำสั่งค้นหาตาม ลำดับที่ระบุในอาร์เรย์:

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

หลังจากนั้นเราก็สามารถรับ ผลลัพธ์ของคำสั่งค้นหา:

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

มารวมทั้งหมดเข้าด้วยกัน และเราจะได้ โค้ดต่อไปนี้:

php<?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);
  }
?>
Задание 1

กำหนดตัวแปร:

php<?php
  $age = 30;
  $salary = 1000;
?>

ค้นหาผู้ใช้ทั้งหมด ที่มีอายุหรือเงินเดือน เท่ากับค่าที่กำหนดในตัวแปร

Задание 2

ลองทำ SQL injection ลงใน โค้ดของคุณ ตรวจสอบให้แน่ใจว่ามันจะไม่ผ่าน