ในการพัฒนาเว็บแอปพลิเคชันด้วย PHP สิ่งสำคัญอันดับต้นๆ ที่นักพัฒนาต้องคำนึงถึงคือความปลอดภัยของข้อมูลครับ โดยเฉพาะช่องโหว่ยอดนิยมอย่าง SQL Injection ซึ่งเป็นการที่ผู้ไม่หวังดีส่งคำสั่ง SQL แปลกปลอมผ่านทาง Form หรือ URL เพื่อเข้ามาขโมยหรือทำลายฐานข้อมูลของเรา
ทำความรู้จัก PDO และ Prepared Statements
ทางออกที่เป็นมาตรฐานสากลในปัจจุบันคือการใช้ PDO (PHP Data Objects) ร่วมกับ Prepared Statements ครับ หลักการทำงานคือการแยก “โครงสร้างคำสั่ง SQL” ออกจาก “ข้อมูล” อย่างเด็ดขาด ทำให้ฐานข้อมูลมองว่าข้อมูลที่ส่งเข้ามาเป็นเพียงตัวอักษรธรรมดา ไม่ใช่ส่วนหนึ่งของคำสั่งที่จะเอาไปรันได้
ตัวอย่างการใช้งาน PDO Prepared Statements
แทนที่เราจะเอาตัวแปรไปใส่ใน Query ตรง ๆ เราจะใช้สิ่งที่เรียกว่า Placeholder (เครื่องหมาย : ตามด้วยชื่อตัวแปร) แทน ดังนี้ครับ
PHP
// 1. เชื่อมต่อฐานข้อมูลด้วย PDO
$pdo = new PDO("mysql:host=localhost;dbname=my_database", "db_user", "db_pass");
// 2. เตรียมคำสั่ง SQL (ใช้ Named Placeholder)
$sql = "SELECT id, username FROM users WHERE email = :email AND status = :status";
$stmt = $pdo->prepare($sql);
// 3. ผูกข้อมูลและสั่งรันคำสั่ง (Binding and Executing)
$stmt->execute([
':email' => $_POST['email'],
':status' => 'active'
]);
// 4. ดึงข้อมูลออกมาใช้งาน
$user = $stmt->fetch();