PHP101 – การทำงานกับฐานข้อมูล MySQL เบื้องต้น

ใน Module นี้ เราจะมาเรียนรู้เกี่ยวกับการทำงานกับฐานข้อมูล MySQL เบื้องต้นโดยใช้ PHP ซึ่งเป็นสิ่งสำคัญสำหรับการสร้างเว็บไซต์แบบไดนามิกที่ต้องการเก็บและจัดการข้อมูลจำนวนมาก

MySQL คืออะไร?

MySQL คือระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (Relational Database Management System – RDBMS) ที่ได้รับความนิยมอย่างมาก ใช้ภาษา SQL (Structured Query Language) ในการจัดการข้อมูล

การเชื่อมต่อกับฐานข้อมูล MySQL ด้วย PHP

PHP มี Extension หลายตัวที่ใช้สำหรับการเชื่อมต่อและทำงานกับฐานข้อมูล MySQL ใน Module นี้เราจะใช้ MySQLi (MySQL Improved Extension) ซึ่งเป็น Extension ที่พัฒนาขึ้นมาใหม่และมีประสิทธิภาพดีกว่า Extension เก่าอย่าง mysql

การสร้าง Connection

ในการเชื่อมต่อกับฐานข้อมูล MySQL คุณต้องใช้ Class mysqli และระบุ Host, Username, Password, และชื่อฐานข้อมูล

PHP
<?php

  $servername = "localhost"; // หรือ IP Address ของ Server
  $username = "your_username";
  $password = "your_password";
  $dbname = "your_database";

  // สร้าง Connection
  $conn = new mysqli($servername, $username, $password, $dbname);

  // ตรวจสอบ Connection
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }
  echo "Connected successfully";

  $conn->close(); // ปิด Connection เมื่อใช้งานเสร็จ

?>

การปิด Connection

ควรปิด Connection กับฐานข้อมูลเมื่อไม่ใช้งานแล้ว เพื่อปลดปล่อยทรัพยากร ใช้ Method close()

PHP
<?php
  // ... (สร้าง Connection) ...
  $conn->close();
?>

การ Query ข้อมูล (Querying Data)

ใช้ Method query() ของ Object mysqli เพื่อส่งคำสั่ง SQL ไปยังฐานข้อมูล

คำสั่ง SELECT

ใช้เพื่อดึงข้อมูลจากตาราง

PHP
<?php

  $servername = "localhost";
  $username = "your_username";
  $password = "your_password";
  $dbname = "your_database";

  $conn = new mysqli($servername, $username, $password, $dbname);
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }

  $sql = "SELECT id, firstname, lastname FROM users";
  $result = $conn->query($sql);

  if ($result->num_rows > 0) {
    // แสดงข้อมูลแต่ละ Row
    while ($row = $result->fetch_assoc()) {
      echo "ID: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
  } else {
    echo "0 results";
  }
  $conn->close();

?>

คำสั่ง INSERT

ใช้เพื่อเพิ่มข้อมูลใหม่ลงในตาราง

PHP
<?php

  $servername = "localhost";
  $username = "your_username";
  $password = "your_password";
  $dbname = "your_database";

  $conn = new mysqli($servername, $username, $password, $dbname);
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }

  $sql = "INSERT INTO users (firstname, lastname, email) VALUES ('John', 'Doe', 'john.doe@example.com')";

  if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
  } else {
    echo "Error: " . $sql . "<br>" . $conn->error;
  }

  $conn->close();

?>

คำสั่ง UPDATE

ใช้เพื่อแก้ไขข้อมูลที่มีอยู่ในตาราง

PHP
<?php

  $servername = "localhost";
  $username = "your_username";
  $password = "your_password";
  $dbname = "your_database";

  $conn = new mysqli($servername, $username, $password, $dbname);
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }

  $sql = "UPDATE users SET lastname='Smith' WHERE id=1";

  if ($conn->query($sql) === TRUE) {
    echo "Record updated successfully";
  } else {
    echo "Error updating record: " . $conn->error;
  }

  $conn->close();

?>

คำสั่ง DELETE

ใช้เพื่อลบข้อมูลออกจากตาราง

PHP
<?php

  $servername = "localhost";
  $username = "your_username";
  $password = "your_password";
  $dbname = "your_database";

  $conn = new mysqli($servername, $username, $password, $dbname);
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }

  $sql = "DELETE FROM users WHERE id=1";

  if ($conn->query($sql) === TRUE) {
    echo "Record deleted successfully";
  } else {
    echo "Error deleting record: " . $conn->error;
  }

  $conn->close();

?>

การป้องกัน SQL Injection

SQL Injection คือช่องโหว่ด้านความปลอดภัยที่ผู้ไม่หวังดีสามารถแทรกคำสั่ง SQL ที่เป็นอันตรายเข้าไปใน Query ทำให้สามารถเข้าถึงหรือแก้ไขข้อมูลในฐานข้อมูลได้

วิธีป้องกัน SQL Injection ที่สำคัญที่สุดคือการใช้ Prepared Statements หรือ Parameterized Queries

PHP
<?php

  $servername = "localhost";
  $username = "your_username";
  $password = "your_password";
  $dbname = "your_database";

  $conn = new mysqli($servername, $username, $password, $dbname);
  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }

  // Prepared statement
  $stmt = $conn->prepare("SELECT id, firstname, lastname FROM users WHERE firstname = ? AND lastname = ?");
  $stmt->bind_param("ss", $firstname, $lastname); // "ss" หมายถึง parameter สองตัวเป็น String

  // กำหนดค่า parameter และ execute
  $firstname = "John";
  $lastname = "Doe";
  $stmt->execute();
  $result = $stmt->get_result();

  if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
      echo "ID: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
  } else {
    echo "0 results";
  }

  $stmt->close();
  $conn->close();

?>

การใช้ Prepared Statements ช่วยให้คุณแยกส่วนของคำสั่ง SQL ออกจากข้อมูลที่ผู้ใช้ป้อน ทำให้ฐานข้อมูลสามารถแยกแยะระหว่างโค้ด SQL และข้อมูลได้

กิจกรรมใน Module 10

  1. สร้างฐานข้อมูลและตารางอย่างง่ายใน MySQL (เช่น ตาราง users ที่มี fields id, firstname, lastname, email)
  2. เขียนโปรแกรม PHP ที่เชื่อมต่อกับฐานข้อมูลที่คุณสร้าง
  3. ใช้คำสั่ง INSERT เพื่อเพิ่มข้อมูลตัวอย่างลงในตาราง
  4. ใช้คำสั่ง SELECT เพื่อดึงข้อมูลทั้งหมดจากตารางและแสดงผล
  5. เขียนโปรแกรม PHP ที่รับข้อมูลจาก Form และใช้คำสั่ง INSERT เพื่อบันทึกลงในฐานข้อมูล
  6. (Optional) ลองใช้คำสั่ง UPDATE และ DELETE เพื่อแก้ไขและลบข้อมูล
  7. (สำคัญมาก) ปรับปรุงโค้ดของคุณโดยใช้ Prepared Statements เพื่อป้องกัน SQL Injection

ใน Module ถัดไป เราจะมาเรียนรู้เกี่ยวกับ Object-Oriented Programming (OOP) ใน PHP ซึ่งเป็นแนวคิดการเขียนโปรแกรมที่ช่วยให้โค้ดของคุณมีความเป็นระเบียบและง่ายต่อการจัดการมากยิ่งขึ้นครับ!

ความคิดเห็น