メインコンテンツへ移動

เนื้อหาภาษาไทย / タイ語のコンテンツ

システムガイド 内容確認済み

การแก้ไขข้อมูลในฐานข้อมูล

บทนี้อธิบายวิธีการแก้ไขข้อมูลในฐานข้อมูล MySQL โดยใช้ PHP และคำสั่ง SQL `UPDATE` ซึ่งจำเป็นต่อการทำ CRUD ให้สมบูรณ์ โดยเน้นย้ำถึงความสำคัญของ `WHERE` clause เพื...

การแก้ไขข้อมูลในฐานข้อมูล

สวัสดีครับ! ในบทที่ 18 ที่ผ่านมา เราได้เรียนรู้วิธีการเพิ่มข้อมูลใหม่ลงในฐานข้อมูล MySQL โดยใช้ PHP กันไปแล้ว ในบทนี้ เราจะมาเรียนรู้วิธีการแก้ไขข้อมูลที่มีอยู่แล้วในฐานข้อมูลกันครับ ซึ่งเป็นส่วนสำคัญของการทำ CRUD (Create, Read, Update, Delete) ให้สมบูรณ์แบบ

UPDATE Statement คืออะไร?

UPDATE statement เป็นคำสั่ง SQL ที่ใช้สำหรับแก้ไขข้อมูลในตาราง โดยเราจะระบุตารางที่ต้องการแก้ไข, คอลัมน์ที่ต้องการเปลี่ยนแปลง, และเงื่อนไขในการเลือกแถวที่จะแก้ไข

โครงสร้างของ UPDATE Statement

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
  • UPDATE table_name: ระบุชื่อตารางที่ต้องการแก้ไข
  • SET column1 = value1, column2 = value2, ...: ระบุคอลัมน์และค่าใหม่ที่ต้องการกำหนด
  • WHERE condition: ระบุเงื่อนไขในการเลือกแถวที่จะแก้ไข (สำคัญมาก!)

สำคัญ: หากคุณไม่ระบุ WHERE clause, ข้อมูลในทุกแถวของตารางจะถูกแก้ไข! ดังนั้นต้องระมัดระวังเป็นพิเศษ

ตัวอย่างการใช้งานจริง

สมมติว่าเรามีตาราง users ที่เก็บข้อมูลผู้ใช้งาน และเราต้องการแก้ไขอีเมลของผู้ใช้ที่มี id เท่ากับ 1 ให้เป็น new_email@example.com

โครงสร้างตาราง users:

CREATE TABLE users (
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(255) NOT NULL,
  email VARCHAR(255) NOT NULL
);

INSERT INTO users (username, email) VALUES
('john_doe', 'john.doe@example.com'),
('jane_doe', 'jane.doe@example.com');

โค้ด PHP สำหรับแก้ไขข้อมูล:

<?php
// ข้อมูลสำหรับการเชื่อมต่อฐานข้อมูล
$servername = "localhost";
$username = "your_username"; // แก้ไขเป็น username ของคุณ
$password = "your_password"; // แก้ไขเป็น password ของคุณ
$dbname = "your_database"; // แก้ไขเป็นชื่อ database ของคุณ

try {
    // สร้างการเชื่อมต่อ
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);

    // กำหนดให้ PDO แสดง error ทั้งหมด
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // ข้อมูลที่ต้องการแก้ไข
    $id = 1;
    $newEmail = "new_email@example.com";

    // คำสั่ง SQL สำหรับแก้ไขข้อมูล
    $sql = "UPDATE users SET email = :email WHERE id = :id";

    // เตรียม prepared statement
    $stmt = $conn->prepare($sql);

    // ผูกค่า parameter
    $stmt->bindParam(':email', $newEmail);
    $stmt->bindParam(':id', $id);

    // execute the query
    $stmt->execute();

    // แสดงข้อความเมื่อแก้ไขข้อมูลสำเร็จ
    echo "แก้ไขข้อมูลสำเร็จ";

    } catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
    }

$conn = null;
?>
  1. เชื่อมต่อกับฐานข้อมูล: สร้างการเชื่อมต่อกับฐานข้อมูล MySQL โดยใช้ PDO
  2. เตรียม UPDATE statement: สร้างคำสั่ง SQL สำหรับแก้ไขข้อมูล โดยใช้ placeholder (:email และ :id) เพื่อป้องกัน SQL Injection
  3. ผูกค่า parameter: ใช้ bindParam() เพื่อผูกค่าให้กับ placeholder
  4. Execute query: สั่งให้ PDO execute คำสั่ง SQL
  5. จัดการ Error: ใช้ try...catch block เพื่อจัดการกับข้อผิดพลาดที่อาจเกิดขึ้น

WHERE Clause: เงื่อนไขการแก้ไขข้อมูล

WHERE clause เป็นส่วนสำคัญของการแก้ไขข้อมูล เพราะมันกำหนดว่าเราจะแก้ไขข้อมูลในแถวไหนบ้าง โดยเราสามารถใช้เงื่อนไขต่างๆ เพื่อระบุแถวที่ต้องการแก้ไขได้

ตัวอย่างการใช้ WHERE Clause

แก้ไขอีเมลของผู้ใช้ที่มี username เป็น 'john_doe':

<?php
// ... (ส่วนของการเชื่อมต่อฐานข้อมูลเหมือนเดิม)

try {
    // ... (ส่วนของการเชื่อมต่อฐานข้อมูลเหมือนเดิม)

    // ข้อมูลที่ต้องการแก้ไข
    $username = "john_doe";
    $newEmail = "john.new@example.com";

    // คำสั่ง SQL สำหรับแก้ไขข้อมูล
    $sql = "UPDATE users SET email = :email WHERE username = :username";

    // เตรียม prepared statement
    $stmt = $conn->prepare($sql);

    // ผูกค่า parameter
    $stmt->bindParam(':email', $newEmail);
    $stmt->bindParam(':username', $username);

    // execute the query
    $stmt->execute();

    // แสดงข้อความเมื่อแก้ไขข้อมูลสำเร็จ
    echo "แก้ไขข้อมูลสำเร็จ";

    } catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
    }

$conn = null;
?>

แก้ไขข้อมูลของผู้ใช้ที่สมัครสมาชิกก่อนวันที่ 2023-01-01 (สมมติว่ามีคอลัมน์ created_at):

<?php
// ... (ส่วนของการเชื่อมต่อฐานข้อมูลเหมือนเดิม)

try {
    // ... (ส่วนของการเชื่อมต่อฐานข้อมูลเหมือนเดิม)

    // ข้อมูลที่ต้องการแก้ไข
    $cutoffDate = "2023-01-01";
    $newEmail = "old_user@example.com";

    // คำสั่ง SQL สำหรับแก้ไขข้อมูล
    $sql = "UPDATE users SET email = :email WHERE created_at < :cutoffDate";

    // เตรียม prepared statement
    $stmt = $conn->prepare($sql);

    // ผูกค่า parameter
    $stmt->bindParam(':email', $newEmail);
    $stmt->bindParam(':cutoffDate', $cutoffDate);

    // execute the query
    $stmt->execute();

    // แสดงข้อความเมื่อแก้ไขข้อมูลสำเร็จ
    echo "แก้ไขข้อมูลสำเร็จ";

    } catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
    }

$conn = null;
?>

การตรวจสอบ Error

การตรวจสอบ error เป็นสิ่งสำคัญในการพัฒนา API เพื่อให้เราสามารถจัดการกับปัญหาที่อาจเกิดขึ้นได้อย่างเหมาะสม

Error ที่พบบ่อยในการแก้ไขข้อมูล

  • SQL Injection: เกิดจากการใช้ข้อมูลที่ไม่ได้ตรวจสอบจากผู้ใช้ในการสร้างคำสั่ง SQL (เราป้องกันได้ด้วย Prepared Statement)
  • Connection Error: เกิดจากปัญหาในการเชื่อมต่อกับฐานข้อมูล (เช่น username/password ไม่ถูกต้อง, ฐานข้อมูลไม่พร้อมใช้งาน)
  • Syntax Error: เกิดจากไวยากรณ์ของคำสั่ง SQL ไม่ถูกต้อง
  • Data Type Error: เกิดจากการพยายามใส่ข้อมูลที่ไม่ตรงกับชนิดข้อมูลของคอลัมน์ (เช่น ใส่ string ในคอลัมน์ที่เป็น integer)
  • Record Not Found: เกิดจากการพยายามแก้ไขข้อมูลที่ไม่มีอยู่ในฐานข้อมูล

ตัวอย่างการจัดการ Error

เราได้ใช้ try...catch block ในตัวอย่างก่อนหน้านี้แล้ว เพื่อดักจับข้อผิดพลาดที่อาจเกิดขึ้นระหว่างการเชื่อมต่อและ execute คำสั่ง SQL

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

<?php
// ... (ส่วนของการเชื่อมต่อฐานข้อมูลเหมือนเดิม)

try {
    // ... (ส่วนของการเชื่อมต่อฐานข้อมูลเหมือนเดิม)

    // ข้อมูลที่ต้องการแก้ไข
    $id = 1;
    $newEmail = "new_email@example.com";

    // คำสั่ง SQL สำหรับแก้ไขข้อมูล
    $sql = "UPDATE users SET email = :email WHERE id = :id";

    // เตรียม prepared statement
    $stmt = $conn->prepare($sql);

    // ผูกค่า parameter
    $stmt->bindParam(':email', $newEmail);
    $stmt->bindParam(':id', $id);

    // execute the query
    $stmt->execute();

    // ตรวจสอบว่ามีแถวที่ถูกแก้ไขหรือไม่
    $rowCount = $stmt->rowCount();

    if ($rowCount > 0) {
        echo "แก้ไขข้อมูลสำเร็จ จำนวน " . $rowCount . " แถว";
    } else {
        echo "ไม่พบข้อมูลที่ต้องการแก้ไข";
    }


    } catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
    }

$conn = null;
?>

สรุป

ในบทนี้ เราได้เรียนรู้วิธีการแก้ไขข้อมูลในฐานข้อมูล MySQL โดยใช้ PHP ผ่านคำสั่ง UPDATE statement รวมถึงการใช้ WHERE clause เพื่อระบุแถวที่ต้องการแก้ไข และการตรวจสอบ error เพื่อให้ API ของเราทำงานได้อย่างถูกต้องและมีประสิทธิภาพ ในบทต่อไป เราจะมาเรียนรู้วิธีการลบข้อมูลออกจากฐานข้อมูลกันครับ

Office.in.th Custom Service

この構成をもとにシステムを開発・カスタマイズしたいですか?

Office.in.th は、エンタープライズ Web アプリケーション、API 連携、官民の業務管理システムの設計・開発を承り、長期的なサポートも提供します。

ソフトウェア開発サービスを見る