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 ในส่วนของการเชื่อมต่อเท่านั้น

Exit mobile version