CRUD Operations - การสร้างข้อมูล (CREATE)
ในบทนี้ เราจะมาเรียนรู้วิธีการสร้างข้อมูลใหม่ในฐานข้อมูลโดยใช้ PDO (PHP Data Objects) ซึ่งเป็นส่วนหนึ่งของ CRUD Operations (Create, Read, Update, Delete) ที่สำคัญในการจัดการฐานข้อมูล
ก่อนที่เราจะเริ่มเขียนโค้ด เรามาทบทวนความหมายของ CRUD Operations กันอีกครั้ง:
- Create (สร้าง): การเพิ่มข้อมูลใหม่ลงในฐานข้อมูล
- Read (อ่าน): การดึงข้อมูลจากฐานข้อมูล
- Update (แก้ไข): การปรับปรุงข้อมูลที่มีอยู่ในฐานข้อมูล
- Delete (ลบ): การลบข้อมูลออกจากฐานข้อมูล
ในบทนี้ เราจะเน้นไปที่การ Create หรือการสร้างข้อมูลใหม่
การเขียน SQL INSERT statement
การสร้างข้อมูลใหม่ในฐานข้อมูลเริ่มต้นด้วยการเขียน SQL INSERT statement ซึ่งเป็นคำสั่งที่ใช้เพิ่มข้อมูลลงในตารางที่ระบุ รูปแบบพื้นฐานของ INSERT statement คือ:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
โดย:
table_nameคือชื่อตารางที่คุณต้องการเพิ่มข้อมูลcolumn1, column2, column3, ...คือชื่อคอลัมน์ที่คุณต้องการระบุค่าvalue1, value2, value3, ...คือค่าที่คุณต้องการใส่ในแต่ละคอลัมน์
ตัวอย่าง: สมมติว่าเรามีตารางชื่อ users ที่มีคอลัมน์ id, username, และ email เราสามารถเพิ่มผู้ใช้ใหม่ได้ดังนี้:
INSERT INTO users (username, email)
VALUES ('john_doe', 'john.doe@example.com');
ในตัวอย่างนี้ เราไม่ได้ระบุค่าสำหรับคอลัมน์ id เนื่องจากโดยทั่วไปแล้วคอลัมน์นี้จะเป็น auto-increment และถูกจัดการโดยฐานข้อมูลเอง
การใช้ prepared statement
ในบทก่อนหน้า เราได้เรียนรู้เกี่ยวกับการใช้ prepared statements เพื่อป้องกัน SQL Injection ซึ่งเป็นเทคนิคการโจมตีที่อันตราย Prepared statements ช่วยให้เราแยกส่วนคำสั่ง SQL ออกจากข้อมูล ทำให้ฐานข้อมูลสามารถจัดการข้อมูลได้อย่างปลอดภัย
เราจะใช้ prepared statements ในการสร้างข้อมูลใหม่ด้วย PDO เช่นกัน นี่คือขั้นตอน:
- เตรียม SQL INSERT statement ด้วย placeholders
- ผูกค่าให้กับ placeholders โดยใช้
bindParam() - execute the statement
ตัวอย่าง:
<?php
// ข้อมูลสำหรับผู้ใช้ใหม่
$username = 'jane_doe';
$email = 'jane.doe@example.com';
// เชื่อมต่อกับฐานข้อมูล (แทนที่ด้วยข้อมูลการเชื่อมต่อของคุณ)
$host = 'localhost';
$dbname = 'my_database';
$user = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// เตรียม SQL INSERT statement ด้วย placeholders
$stmt = $pdo->prepare("INSERT INTO users (username, email) VALUES (:username, :email)");
// ผูกค่าให้กับ placeholders โดยใช้ bindParam()
$stmt->bindParam(':username', $username);
$stmt->bindParam(':email', $email);
// execute the statement
$stmt->execute();
echo "เพิ่มผู้ใช้ใหม่สำเร็จ!";
} catch (PDOException $e) {
echo "เกิดข้อผิดพลาด: " . $e->getMessage();
}
?>
คำอธิบายโค้ด:
- เราสร้างตัวแปร
$usernameและ$emailเพื่อเก็บข้อมูลของผู้ใช้ใหม่ - เราสร้างออบเจ็กต์
PDOเพื่อเชื่อมต่อกับฐานข้อมูล - เราใช้เมธอด
prepare()เพื่อเตรียม SQL INSERT statement โดยใช้:usernameและ:emailเป็น placeholders - เราใช้เมธอด
bindParam()เพื่อผูกค่าของตัวแปร$usernameและ$emailกับ placeholders ที่เกี่ยวข้อง - เราใช้เมธอด
execute()เพื่อ execute the prepared statement ซึ่งจะทำการเพิ่มข้อมูลใหม่ลงในตารางusers - เราใช้ try-catch block เพื่อจัดการกับข้อผิดพลาดที่อาจเกิดขึ้นระหว่างการเชื่อมต่อและ execute คำสั่ง SQL
การตรวจสอบผลลัพธ์
หลังจากที่เรา execute the INSERT statement แล้ว เราควรตรวจสอบว่าการเพิ่มข้อมูลสำเร็จหรือไม่ เราสามารถทำได้โดยการใช้เมธอด rowCount() ซึ่งจะคืนค่าจำนวนแถวที่ได้รับผลกระทบจากการ execute คำสั่ง SQL
ตัวอย่าง:
<?php
// ... (โค้ดเชื่อมต่อฐานข้อมูลและเตรียม prepared statement จากตัวอย่างก่อนหน้า)
try {
// ... (โค้ดเตรียม prepared statement และ bindParam() จากตัวอย่างก่อนหน้า)
// execute the statement
$stmt->execute();
// ตรวจสอบจำนวนแถวที่ได้รับผลกระทบ
$rowCount = $stmt->rowCount();
if ($rowCount > 0) {
echo "เพิ่มผู้ใช้ใหม่สำเร็จ! จำนวนแถวที่ได้รับผลกระทบ: " . $rowCount;
} else {
echo "ไม่สามารถเพิ่มผู้ใช้ใหม่ได้!";
}
} catch (PDOException $e) {
echo "เกิดข้อผิดพลาด: " . $e->getMessage();
}
?>
ในตัวอย่างนี้ เราเรียกใช้เมธอด rowCount() หลังจาก execute the statement และตรวจสอบว่าค่าที่ได้มากกว่า 0 หรือไม่ ถ้ามากกว่า 0 แสดงว่าการเพิ่มข้อมูลสำเร็จ
สรุป
ในบทนี้ เราได้เรียนรู้วิธีการสร้างข้อมูลใหม่ในฐานข้อมูลโดยใช้ PDO และ prepared statements เราได้เรียนรู้เกี่ยวกับ:
- การเขียน SQL INSERT statement
- การใช้ prepared statements เพื่อป้องกัน SQL Injection
- การใช้
bindParam()เพื่อผูกค่าให้กับ placeholders - การใช้
execute()เพื่อ execute the prepared statement - การใช้
rowCount()เพื่อตรวจสอบผลลัพธ์
ในบทต่อไป เราจะเรียนรู้วิธีการอ่านข้อมูลจากฐานข้อมูล (READ) ซึ่งเป็นอีกส่วนหนึ่งที่สำคัญของ CRUD Operations