ใช้ PDO: [1]
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
$statement = $pdo->prepare($select);
$statement->execute($ids);
ใช้ MySQLi [2]
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
$statement = $mysqli->prepare($select);
$statement->bind_param(str_repeat('i', count($ids)), ...$ids);
$statement->execute();
$result = $statement->get_result();
คำอธิบาย:
ใช้ตัวIN()
ดำเนินการSQL เพื่อตรวจสอบว่ามีค่าอยู่ในรายการที่กำหนดหรือไม่
โดยทั่วไปดูเหมือนว่านี้:
expr IN (value,...)
เราสามารถสร้างการแสดงออกเพื่อวางภายใน()
จากอาร์เรย์ของเรา โปรดทราบว่าจะต้องมีอย่างน้อยหนึ่งค่าในวงเล็บหรือ MySQL จะส่งคืนข้อผิดพลาด; นี่เท่ากับทำให้แน่ใจว่าอาร์เรย์ของเรามีค่าอย่างน้อยหนึ่งค่า เพื่อช่วยป้องกันการโจมตีจากการฉีด SQL ก่อนอื่นให้สร้างรายการ?
สำหรับแต่ละรายการเพื่อสร้างแบบสอบถามแบบกำหนดพารามิเตอร์ ที่นี่ฉันคิดว่าอาร์เรย์ที่มีรหัสของคุณถูกเรียกว่า$ids
:
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
เมื่อกำหนดอาร์เรย์อินพุตสามรายการ$select
จะมีลักษณะดังนี้:
SELECT *
FROM galleries
WHERE id IN (?, ?, ?)
โปรดทราบอีกครั้งว่ามี?
สำหรับแต่ละรายการในอาร์เรย์อินพุต จากนั้นเราจะใช้ PDO หรือ MySQLi เพื่อจัดทำและดำเนินการแบบสอบถามตามที่ระบุไว้ข้างต้น
การใช้IN()
โอเปอเรเตอร์กับสตริง
มันง่ายที่จะเปลี่ยนระหว่างสตริงและจำนวนเต็มเนื่องจากพารามิเตอร์ที่ถูกผูกไว้ สำหรับ PDO ไม่มีการเปลี่ยนแปลงที่จำเป็น สำหรับ MySQLi เปลี่ยนstr_repeat('i',
เป็นstr_repeat('s',
ถ้าคุณต้องการตรวจสอบสตริง
[1]:ฉันละเว้นการตรวจสอบข้อผิดพลาดบางอย่างแล้ว คุณต้องตรวจสอบข้อผิดพลาดตามปกติสำหรับแต่ละวิธีฐานข้อมูล (หรือตั้งค่าไดรเวอร์ DB ของคุณให้มีข้อยกเว้น)
[2]:ต้องการ PHP 5.6 หรือสูงกว่า อีกครั้งฉันได้ละเว้นการตรวจสอบข้อผิดพลาดบางอย่างสั้น ๆ