본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

CRUD Operations: การลบข้อมูล (DELETE)

บทความนี้อธิบายวิธีการลบข้อมูลออกจากฐานข้อมูลโดยใช้ PDO และคำสั่ง SQL `DELETE` ซึ่งเป็นส่วนหนึ่งของ CRUD operations โดยเน้นย้ำความสำคัญของการใช้ Prepared Statem...

CRUD Operations: การลบข้อมูล (DELETE)

ในบทความนี้ เราจะมาเรียนรู้วิธีการลบข้อมูลออกจากฐานข้อมูลโดยใช้ PDO และคำสั่ง SQL DELETE ซึ่งเป็นส่วนหนึ่งของ CRUD operations (Create, Read, Update, Delete) หลังจากที่เราได้เรียนรู้วิธีการสร้าง, อ่าน, และแก้ไขข้อมูลไปแล้ว การลบข้อมูลก็เป็นส่วนสำคัญในการจัดการข้อมูลในฐานข้อมูลของเรา

การเขียน SQL DELETE statement

คำสั่ง SQL DELETE ใช้เพื่อลบแถว (row) หนึ่งแถวหรือมากกว่าออกจากตาราง (table) ในฐานข้อมูล รูปแบบพื้นฐานของคำสั่ง DELETE คือ:

DELETE FROM table_name WHERE condition;
  • DELETE FROM: ระบุว่าเราต้องการลบข้อมูลจากตาราง
  • table_name: ชื่อของตารางที่เราต้องการลบข้อมูล
  • WHERE condition: เงื่อนไขที่ระบุว่าแถวใดบ้างที่เราต้องการลบ หากไม่ระบุ WHERE จะเป็นการลบข้อมูลทั้งหมดในตาราง (ซึ่งควรระมัดระวังอย่างยิ่ง!)

ตัวอย่างเช่น หากเราต้องการลบผู้ใช้ที่มี id เท่ากับ 5 จากตาราง users เราจะเขียนคำสั่ง SQL ดังนี้:

DELETE FROM users WHERE id = 5;

การใช้ Prepared Statement สำหรับการลบข้อมูล

เช่นเดียวกับการแก้ไขข้อมูล (UPDATE) การใช้ Prepared Statements เมื่อลบข้อมูล (DELETE) เป็นสิ่งสำคัญอย่างยิ่งในการป้องกัน SQL Injection Prepared Statements ช่วยให้เราแยกคำสั่ง SQL ออกจากข้อมูลที่ผู้ใช้ป้อนเข้ามา ทำให้ฐานข้อมูลของเราปลอดภัยยิ่งขึ้น

ขั้นตอนการใช้ Prepared Statement สำหรับการลบข้อมูลมีดังนี้:

  1. เตรียม (Prepare) คำสั่ง SQL DELETE พร้อม placeholder
  2. ผูก (Bind) ค่าให้กับ placeholder
  3. ดำเนินการ (Execute) คำสั่ง SQL

ต่อไปนี้เป็นตัวอย่างการใช้ Prepared Statement เพื่อลบข้อมูลผู้ใช้จากตาราง users โดยใช้ PDO:

<?php
// สมมติว่าเรามีการเชื่อมต่อฐานข้อมูล $pdo อยู่แล้ว

try {
  // 1. เตรียมคำสั่ง SQL DELETE พร้อม placeholder
  $sql = "DELETE FROM users WHERE id = :id";
  $stmt = $pdo->prepare($sql);

  // 2. ผูกค่าให้กับ placeholder
  $id = 5; // ID ของผู้ใช้ที่เราต้องการลบ
  $stmt->bindParam(':id', $id, PDO::PARAM_INT); // ระบุชนิดข้อมูลเป็น Integer

  // 3. ดำเนินการคำสั่ง SQL
  $stmt->execute();

  echo "ลบข้อมูลผู้ใช้สำเร็จ";

} catch (PDOException $e) {
  echo "เกิดข้อผิดพลาด: " . $e->getMessage();
}
?>

ในตัวอย่างนี้:

  • เราเตรียมคำสั่ง SQL DELETE FROM users WHERE id = :id โดยใช้ :id เป็น placeholder
  • เราผูกค่า $id (ซึ่งมีค่าเป็น 5) กับ placeholder :id โดยใช้ bindParam() และระบุชนิดข้อมูลเป็น PDO::PARAM_INT เพื่อให้แน่ใจว่าค่าที่ส่งไปยังฐานข้อมูลเป็นจำนวนเต็ม
  • เราดำเนินการคำสั่ง SQL โดยใช้ execute()
  • เราใช้ try-catch block เพื่อจัดการกับ Exception ที่อาจเกิดขึ้นระหว่างการดำเนินการ

การใช้ execute() โดยตรงกับ Array

อีกวิธีหนึ่งในการใช้งาน Prepared Statements คือการส่งค่าเป็น array ไปยังเมธอด execute() โดยตรง:

<?php
// สมมติว่าเรามีการเชื่อมต่อฐานข้อมูล $pdo อยู่แล้ว

try {
  // 1. เตรียมคำสั่ง SQL DELETE พร้อม placeholder
  $sql = "DELETE FROM users WHERE id = :id";
  $stmt = $pdo->prepare($sql);

  // 2. กำหนดค่าในรูปแบบ array
  $params = array(':id' => 5);

  // 3. ดำเนินการคำสั่ง SQL พร้อมส่งค่าใน array
  $stmt->execute($params);

  echo "ลบข้อมูลผู้ใช้สำเร็จ";

} catch (PDOException $e) {
  echo "เกิดข้อผิดพลาด: " . $e->getMessage();
}
?>

ในตัวอย่างนี้ เราสร้าง array $params ที่มี key คือชื่อ placeholder (:id) และ value คือค่าที่เราต้องการผูก (5) จากนั้นเราส่ง array นี้เป็น argument ให้กับเมธอด execute()

การตรวจสอบผลลัพธ์ของการลบข้อมูล

หลังจากที่เราดำเนินการคำสั่ง DELETE แล้ว เราสามารถตรวจสอบได้ว่ามีแถวใดถูกลบออกจากฐานข้อมูลหรือไม่ โดยใช้เมธอด rowCount()

<?php
// สมมติว่าเรามีการเชื่อมต่อฐานข้อมูล $pdo อยู่แล้ว

try {
  // 1. เตรียมคำสั่ง SQL DELETE พร้อม placeholder
  $sql = "DELETE FROM users WHERE id = :id";
  $stmt = $pdo->prepare($sql);

  // 2. ผูกค่าให้กับ placeholder
  $id = 5; // ID ของผู้ใช้ที่เราต้องการลบ
  $stmt->bindParam(':id', $id, PDO::PARAM_INT);

  // 3. ดำเนินการคำสั่ง SQL
  $stmt->execute();

  // 4. ตรวจสอบจำนวนแถวที่ถูกลบ
  $rowCount = $stmt->rowCount();

  if ($rowCount > 0) {
    echo "ลบข้อมูลผู้ใช้สำเร็จ จำนวนแถวที่ถูกลบ: " . $rowCount;
  } else {
    echo "ไม่พบผู้ใช้ที่มี ID ดังกล่าว หรือไม่มีแถวใดถูกลบ";
  }

} catch (PDOException $e) {
  echo "เกิดข้อผิดพลาด: " . $e->getMessage();
}
?>

เมธอด rowCount() จะคืนค่าจำนวนแถวที่ได้รับผลกระทบจากการดำเนินการ DELETE หากค่าที่ได้มากกว่า 0 แสดงว่ามีแถวถูกลบออกจากฐานข้อมูล หากค่าที่ได้เป็น 0 แสดงว่าไม่มีแถวใดถูกลบ (อาจเป็นเพราะไม่มีผู้ใช้ที่มี ID ดังกล่าวอยู่ในฐานข้อมูล)

ข้อควรระวังในการลบข้อมูล

การลบข้อมูลเป็น operation ที่ควรทำด้วยความระมัดระวังอย่างยิ่ง เนื่องจากข้อมูลที่ถูกลบไปแล้วมักจะกู้คืนได้ยากหรือเป็นไปไม่ได้ ดังนั้น ก่อนที่จะดำเนินการลบข้อมูล ควรตรวจสอบให้แน่ใจว่า:

  • คุณเข้าใจอย่างถ่องแท้ว่าข้อมูลใดที่คุณกำลังจะลบ
  • คุณมี backup ของข้อมูลที่สำคัญ (หากจำเป็น)
  • คุณได้รับอนุญาตให้ลบข้อมูลนั้น (โดยเฉพาะในระบบที่มีการจัดการสิทธิ์การเข้าถึง)

นอกจากนี้ ควรหลีกเลี่ยงการใช้คำสั่ง DELETE โดยไม่มี WHERE clause เพราะจะทำให้ข้อมูลทั้งหมดในตารางถูกลบ ซึ่งอาจก่อให้เกิดความเสียหายร้ายแรงได้

สรุป

ในบทความนี้ เราได้เรียนรู้วิธีการลบข้อมูลออกจากฐานข้อมูลโดยใช้ PDO และคำสั่ง SQL DELETE เราได้เน้นย้ำถึงความสำคัญของการใช้ Prepared Statements เพื่อป้องกัน SQL Injection และได้แสดงตัวอย่างการใช้งานทั้ง bindParam() และ execute() รวมถึงการตรวจสอบผลลัพธ์และจัดการกับ Exception ที่อาจเกิดขึ้น การเข้าใจวิธีการลบข้อมูลอย่างถูกต้องและปลอดภัยเป็นสิ่งสำคัญในการจัดการฐานข้อมูลอย่างมีประสิทธิภาพ

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기