การเชื่อมต่อกับฐานข้อมูล MySQL
ในบทที่แล้ว เราได้สร้าง API Endpoint สำหรับ CRUD (Create, Read, Update, Delete) แบบจำลอง แต่ยังไม่ได้เชื่อมต่อกับฐานข้อมูลจริง ในบทนี้ เราจะมาเรียนรู้วิธีการเชื่อมต่อ API ของเรากับฐานข้อมูล MySQL ซึ่งเป็นฐานข้อมูลที่นิยมใช้กันอย่างแพร่หลาย
ทำไมต้องใช้ฐานข้อมูล?
ฐานข้อมูลเป็นที่เก็บข้อมูลที่เป็นระบบ ช่วยให้เราจัดเก็บ, ค้นหา, แก้ไข, และลบข้อมูลได้อย่างมีประสิทธิภาพ เมื่อเราสร้าง API ที่มีการจัดการข้อมูล (เช่น ข้อมูลสินค้า, ข้อมูลผู้ใช้งาน) การใช้ฐานข้อมูลจึงเป็นสิ่งจำเป็น
MySQL คืออะไร?
MySQL เป็นระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database Management System - RDBMS) ที่ได้รับความนิยมอย่างมาก เป็นโอเพนซอร์สและใช้งานได้ฟรี (ภายใต้เงื่อนไขบางประการ) ทำให้เป็นตัวเลือกที่ดีสำหรับโปรเจกต์ขนาดเล็กไปจนถึงขนาดใหญ่
การใช้ mysqli
ใน PHP เราสามารถเชื่อมต่อกับฐานข้อมูล MySQL ได้หลายวิธี วิธีที่แนะนำและเป็นที่นิยมคือการใช้ extension mysqli (MySQL Improved Extension) ซึ่งเป็นส่วนขยายที่ปรับปรุงจาก mysql extension เดิม (ซึ่งถูกเลิกใช้งานไปแล้ว) mysqli ให้ประสิทธิภาพและความปลอดภัยที่ดีกว่า
การสร้าง Connection
การสร้าง Connection คือการสร้างการเชื่อมต่อระหว่าง PHP script ของเรากับฐานข้อมูล MySQL เพื่อให้เราสามารถส่งคำสั่ง SQL ไปยังฐานข้อมูลได้
ศัพท์หลัก:
- Hostname: ชื่อหรือ IP address ของเครื่องที่ติดตั้ง MySQL server (เช่น
localhostหรือ127.0.0.1) - Username: ชื่อผู้ใช้สำหรับเข้าถึงฐานข้อมูล
- Password: รหัสผ่านสำหรับเข้าถึงฐานข้อมูล
- Database Name: ชื่อของฐานข้อมูลที่เราต้องการใช้งาน
ตัวอย่าง:
<?php
$hostname = "localhost";
$username = "your_username";
$password = "your_password";
$database = "your_database";
// สร้าง Connection
$conn = new mysqli($hostname, $username, $password, $database);
// ตรวจสอบ Connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
// ปิด Connection เมื่อใช้งานเสร็จ
$conn->close();
?>
คำอธิบาย:
- เรากำหนดค่าตัวแปรสำหรับ
$hostname,$username,$password, และ$databaseโดยแทนที่ค่าใน" "ด้วยข้อมูลจริงของฐานข้อมูลของคุณ new mysqli($hostname, $username, $password, $database)สร้าง object$connซึ่งเป็นการเชื่อมต่อกับฐานข้อมูล$conn->connect_errorตรวจสอบว่าการเชื่อมต่อสำเร็จหรือไม่ ถ้าไม่สำเร็จ จะแสดง error message และหยุดการทำงานของ script ด้วยdie()echo "Connected successfully";แสดงข้อความเมื่อเชื่อมต่อสำเร็จ$conn->close();ปิดการเชื่อมต่อกับฐานข้อมูล (ควรปิดทุกครั้งหลังใช้งานเสร็จ)
การ Query ข้อมูล
เมื่อเราเชื่อมต่อกับฐานข้อมูลได้แล้ว ขั้นตอนต่อไปคือการส่งคำสั่ง SQL (Structured Query Language) ไปยังฐานข้อมูลเพื่อดึงข้อมูล, เพิ่มข้อมูล, แก้ไขข้อมูล, หรือลบข้อมูล
คำสั่ง SQL ที่ควรรู้:
- SELECT: ใช้สำหรับดึงข้อมูลจากฐานข้อมูล
- INSERT: ใช้สำหรับเพิ่มข้อมูลลงในฐานข้อมูล
- UPDATE: ใช้สำหรับแก้ไขข้อมูลในฐานข้อมูล
- DELETE: ใช้สำหรับลบข้อมูลออกจากฐานข้อมูล
ตัวอย่าง: การดึงข้อมูลจากฐานข้อมูล
สมมติว่าเรามีตารางชื่อ products ในฐานข้อมูล your_database ซึ่งมี column id, name, และ price
<?php
$hostname = "localhost";
$username = "your_username";
$password = "your_password";
$database = "your_database";
// สร้าง Connection
$conn = new mysqli($hostname, $username, $password, $database);
// ตรวจสอบ Connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// คำสั่ง SQL
$sql = "SELECT id, name, price FROM products";
// ส่งคำสั่ง SQL ไปยังฐานข้อมูล
$result = $conn->query($sql);
// ตรวจสอบว่ามีข้อมูลหรือไม่
if ($result->num_rows > 0) {
// วน loop เพื่อดึงข้อมูลแต่ละ row
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Price: " . $row["price"]. "<br>";
}
} else {
echo "No results";
}
// ปิด Connection เมื่อใช้งานเสร็จ
$conn->close();
?>
คำอธิบาย:
$sql = "SELECT id, name, price FROM products";กำหนดคำสั่ง SQL เพื่อดึงข้อมูลid,name, และpriceจากตารางproducts$result = $conn->query($sql);ส่งคำสั่ง SQL ไปยังฐานข้อมูลและเก็บผลลัพธ์ไว้ในตัวแปร$result$result->num_rows > 0ตรวจสอบว่ามีข้อมูลที่ถูกดึงออกมาหรือไม่$result->fetch_assoc()ดึงข้อมูลแต่ละ row ในรูปแบบ associative array (array ที่มี key เป็นชื่อ column)echo "ID: " . $row["id"]. " - Name: " . $row["name"]. " - Price: " . $row["price"]. "<br>";แสดงข้อมูลแต่ละ row
ข้อควรระวัง
- Security: การเก็บ username และ password ในไฟล์ PHP โดยตรงไม่ปลอดภัย ควรใช้ environment variables หรือ secure configuration files แทน
- Error Handling: ควรมีระบบจัดการ error ที่ดี เพื่อให้สามารถ debug และแก้ไขปัญหาได้ง่าย
- SQL Injection: การสร้าง query โดยตรงจาก user input อาจทำให้เกิด SQL injection ซึ่งเป็นช่องโหว่ที่ร้ายแรง ควรใช้ prepared statements เพื่อป้องกัน
สรุป
ในบทนี้ เราได้เรียนรู้วิธีการเชื่อมต่อกับฐานข้อมูล MySQL ใน PHP โดยใช้ mysqli extension เราได้เรียนรู้การสร้าง Connection, การ Query ข้อมูล, และข้อควรระวังในการใช้งานฐานข้อมูล ในบทถัดไป เราจะเจาะลึกถึงการสร้าง API Endpoint สำหรับ CRUD (Create, Read, Update, Delete) โดยใช้ข้อมูลจากฐานข้อมูลจริง