PlusMagi's Blog By Pitt Phunsanit Backend,Database PHP: การใช้งาน MySQLi ฉบับเข้าใจง่าย

PHP: การใช้งาน MySQLi ฉบับเข้าใจง่าย

ในการพัฒนาเว็บแอปพลิเคชันที่ทันสมัย การเชื่อมต่อกับฐานข้อมูล (Database) อย่างปลอดภัยและมีประสิทธิภาพถือเป็นรากฐานที่สำคัญที่สุด หากคุณกำลังใช้ PHP และทำงานกับฐานข้อมูลที่ทรงพลังอย่าง PostgreSQL การเลือกใช้เครื่องมือที่ถูกต้องจึงเป็นสิ่งจำเป็น

แม้ว่าในอดีตเราอาจเคยใช้ส่วนขยายเฉพาะอย่าง MySQLi หรือ pg_connect แต่ในระดับ Senior Developer เราจะแนะนำให้ใช้ PHP Data Objects (PDO) เสมอ เพราะ PDO เป็นมาตรฐานสากลที่ช่วยให้เราสามารถเชื่อมต่อ PHP กับฐานข้อมูลได้หลากหลายชนิด (เช่น PostgreSQL, MySQL, SQLite) ด้วยไวยากรณ์ที่สม่ำเสมอ และที่สำคัญที่สุดคือการป้องกันช่องโหว่ร้ายแรงอย่าง SQL Injection ได้อย่างสมบูรณ์

บทความนี้จะพาคุณไปเรียนรู้การเชื่อมต่อและจัดการข้อมูลจาก PostgreSQL โดยใช้ PDO ซึ่งเป็นแนวทางปฏิบัติที่ดีที่สุด (Best Practice) ที่ทุกนักพัฒนาควรทราบ เพื่อให้โค้ดของคุณมีความปลอดภัยและยืดหยุ่นสูงสุด

⚙️ 1. การเชื่อมต่อฐานข้อมูล (Database Connection) ด้วย PDO

การเชื่อมต่อที่ปลอดภัยต้องเริ่มต้นด้วยการตั้งค่า PDO Object อย่างถูกต้อง เราต้องระบุ Driver (ในที่นี้คือ pgsql), Host, Username, Password และชื่อฐานข้อมูล สิ่งสำคัญคือการตั้งค่า Error Mode ให้เป็น Exception เพื่อให้เราสามารถจัดการข้อผิดพลาดได้อย่างเป็นระบบและโค้ดไม่หยุดทำงานเมื่อเกิดปัญหา

นี่คือตัวอย่างการเชื่อมต่อที่สมบูรณ์แบบ:

PHP

<?php
// 1. ข้อมูลการเชื่อมต่อ
$host = "localhost";
$dbname = "your_database_name";
$user = "your_user";
$pass = "your_password";

try {
    // สร้าง PDO Object
    $pdo = new PDO("pgsql:host=$host;dbname=$dbname", $user, $pass);
    // ตั้งค่า Error Mode เป็น Exception เพื่อการจัดการข้อผิดพลาดที่ดีที่สุด
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "✅ เชื่อมต่อฐานข้อมูล PostgreSQL สำเร็จแล้ว!";
} catch (PDOException $e) {
    // จัดการข้อผิดพลาดในการเชื่อมต่อ
    die("❌ การเชื่อมต่อล้มเหลว: " . $e->getMessage());
}
?>

🛡️ 2. การ Query ข้อมูลอย่างปลอดภัยด้วย Prepared Statements

หัวใจของการเขียนโค้ดระดับ Senior คือการป้องกันการถูกโจมตี เราต้องไม่นำค่าที่รับมาจากผู้ใช้ (User Input) มาต่อรวมกับคำสั่ง SQL โดยตรง แต่ต้องใช้ Prepared Statements เสมอ เพื่อให้ PDO จัดการการแยกแยะระหว่างคำสั่ง SQL และข้อมูลที่ส่งเข้ามาอย่างชัดเจน

สมมติว่าเราต้องการดึงข้อมูลผู้ใช้ที่มี ID หรือสถานะเฉพาะ:

PHP

// 2. การเตรียมคำสั่ง SQL (Prepared Statement)
$stmt = $pdo->prepare("SELECT * FROM users WHERE status = :status AND id = :id");

// 3. การผูกค่า (Binding Parameters) ด้วยค่าที่ปลอดภัย
$status_filter = "active";
$user_id_filter = 1;

$stmt->bindParam(':status', $status_filter, PDO::PARAM_STR);
$stmt->bindParam(':id', $user_id_filter, PDO::PARAM_INT);

// 4. การรันคำสั่งและดึงผลลัพธ์
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if ($user) {
    print_r($user);
} else {
    echo "ไม่พบข้อมูลผู้ใช้ที่ระบุ";
}
?>

💡 สรุปแนวทางปฏิบัติที่ดีที่สุด (Best Practices)

การใช้ PDO กับ PostgreSQL ไม่เพียงแต่ทำให้โค้ดของคุณทำงานได้ แต่ยังยกระดับความปลอดภัยของแอปพลิเคชันทั้งหมด การใช้ Prepared Statements และการจัดการข้อผิดพลาดด้วย try...catch คือสิ่งที่นักพัฒนาอาวุโสทุกคนต้องยึดถือ

จำไว้ว่า การเลือกใช้ PDO ทำให้โค้ดของคุณมีความยืดหยุ่นสูง หากวันหน้าคุณต้องการเปลี่ยนไปใช้ฐานข้อมูลชนิดอื่น (เช่น MySQL) คุณแทบไม่ต้องแก้ไขโค้ดส่วนการ Query เลย เพียงแค่เปลี่ยน Driver ในส่วนของการเชื่อมต่อเท่านั้น