PHP & MySQL: คู่มือดึงข้อมูลจากฐานข้อมูลมาโชว์บนเว็บ (พร้อมโค้ด)

หัวใจของเว็บไซต์ไดนามิก (Dynamic Website) ที่เราใช้งานกันทุกวันนี้ ตั้งแต่เว็บบอร์ด, บล็อก, ไปจนถึง E-commerce คือความสามารถในการ ดึงข้อมูล (Fetch Data) จากฐานข้อมูลมาแสดงผลได้อย่างถูกต้องและรวดเร็ว สำหรับนักพัฒนาเว็บแล้ว การใช้ภาษา PHP เพื่อสื่อสารกับฐานข้อมูล MySQL ถือเป็นทักษะพื้นฐานที่สำคัญที่สุด

บทความนี้จะสรุปขั้นตอนการเชื่อมต่อและดึงข้อมูลแบบเข้าใจง่าย พร้อมโค้ดตัวอย่างที่ปลอดภัยและนำไปใช้งานได้จริง

ภาพรวมการทำงาน 3 ขั้นตอน:

  1. เชื่อมต่อ (Connect): PHP ต้องทำการ “แนะนำตัว” กับเซิร์ฟเวอร์ MySQL โดยใช้ข้อมูลที่ถูกต้อง (เหมือนการใช้ Username/Password เพื่อล็อกอิน)
  2. ส่งคำสั่ง (Query): หลังจากเชื่อมต่อสำเร็จ PHP จะส่งคำสั่งภาษา SQL (Structured Query Language) ไปยังฐานข้อมูลเพื่อบอกว่า “ต้องการข้อมูลอะไร”
  3. แสดงผล (Display): เมื่อ MySQL ส่งข้อมูลกลับมา PHP จะนำข้อมูลเหล่านั้นมาจัดรูปแบบและแสดงผลเป็น HTML บนหน้าเว็บ

วิธีเชื่อมต่อที่ทันสมัยและปลอดภัย: PDO

ในอดีต นักพัฒนา PHP มักใช้ฟังก์ชัน mysql_* ซึ่งปัจจุบัน เลิกใช้แล้วและไม่ปลอดภัยอย่างยิ่ง! วิธีการที่แนะนำในปัจจุบันคือการใช้ PDO (PHP Data Objects) เพราะมีความยืดหยุ่นสูงและช่วยป้องกันการโจมตีประเภท SQL Injection ได้เป็นอย่างดี

Let’s Code! มาเริ่มเขียนโค้ดกัน

สมมติว่าเรามีฐานข้อมูลชื่อ my_store และมีตารางชื่อ products ที่มีข้อมูลสินค้าดังนี้:

  • id (รหัสสินค้า)
  • name (ชื่อสินค้า)
  • price (ราคา)

ขั้นตอนที่ 1: สร้างไฟล์เชื่อมต่อ (เช่น config.php)

PHP

<?php
// config.php

$host = 'localhost';      // หรือ IP ของเซิร์ฟเวอร์ฐานข้อมูล
$dbname = 'my_store';     // ชื่อฐานข้อมูล
$user = 'root';           // ชื่อผู้ใช้ฐานข้อมูล
$pass = 'your_password';  // รหัสผ่าน
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
     $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
     throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
?>
  • คำอธิบาย: ไฟล์นี้ทำหน้าที่ตั้งค่าการเชื่อมต่อและสร้าง Object $pdo เตรียมไว้ใช้งาน เราใช้ try...catch เพื่อดักจับข้อผิดพลาดหากการเชื่อมต่อล้มเหลว

ขั้นตอนที่ 2: สร้างไฟล์ดึงข้อมูลและแสดงผล (เช่น index.php)

PHP

<?php
// index.php

// เรียกใช้ไฟล์เชื่อมต่อ
require 'config.php';

// 1. เตรียมคำสั่ง SQL
$sql = "SELECT id, name, price FROM products ORDER BY name ASC";

// 2. ส่งคำสั่งไปยังฐานข้อมูล
$stmt = $pdo->query($sql);

?>
<!DOCTYPE html>
<html lang="th">
<head>
    <meta charset="UTF-8">
    <title>รายการสินค้า</title>
    <style>
        table { width: 100%; border-collapse: collapse; }
        th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>

    <h1>สินค้าทั้งหมดในร้าน</h1>
    
    <table>
        <thead>
            <tr>
                <th>รหัสสินค้า</th>
                <th>ชื่อสินค้า</th>
                <th>ราคา (บาท)</th>
            </tr>
        </thead>
        <tbody>
            <?php 
            // 3. วนลูปเพื่อแสดงผลข้อมูลทีละแถว
            while ($row = $stmt->fetch()): ?>
                <tr>
                    <td><?= htmlspecialchars($row['id']) ?></td>
                    <td><?= htmlspecialchars($row['name']) ?></td>
                    <td><?= number_format($row['price'], 2) ?></td>
                </tr>
            <?php endwhile; ?>
        </tbody>
    </table>

</body>
</html>
  • คำอธิบาย:
    1. เราใช้ require 'config.php' เพื่อนำการตั้งค่าการเชื่อมต่อเข้ามา
    2. $pdo->query($sql) คือการส่งคำสั่ง SQL ไปทำงาน
    3. while ($row = $stmt->fetch()) คือหัวใจของการแสดงผล มันจะดึงข้อมูลออกมาทีละแถว (row) และเก็บในตัวแปร $row จนกว่าจะหมด
    4. htmlspecialchars() เป็นฟังก์ชันสำคัญที่ช่วยป้องกันการโจมตีแบบ XSS (Cross-site Scripting) โดยการแปลงอักขระพิเศษให้เป็นโค้ด HTML ที่ปลอดภัยก่อนแสดงผล

เพียงเท่านี้ คุณก็สามารถดึงข้อมูลจาก MySQL มาแสดงผลบนหน้าเว็บด้วย PHP ได้อย่างมืออาชีพและปลอดภัยแล้ว!

Scroll to Top