เขียน PHP PDO ตอนที่ 4 Transactions


หน้าแรก PHP MySQL เกร็ดความรู้ เขียน PHP PDO ตอนที่ 4 Transactions
บทความนี้ว่าด้วยเรื่องการทำ Transaction ของการเขียนโปรแกรมด้วยภาษา php โดยการใช้ PDO นั้นจะมีคำสั่งที่เราจำเป็นจะต้องใช้งานแน่ ๆ เพิ่มมาอีก 3 คำสั่งคือ

beginTransaction();
commit();
rollBack();

รับทำเว็บ  webUB.com


ซึ่งก็เป็นคำสั่งพื้นฐานของการทำ transactions ทั่วๆ ไป คล้าย ๆ กับ adodb โดยการจะทำงานแบบ transaction ได้นั้นต้องทำตั้งแต่การสร้าง Table ของดาต้าเบส( ผมเน้น MySQL) เลย

การสร้าง table MySQL นั้นจะต้องกำหนดประเภทการจัดเก็บข้อมูลเป็นแบบ InnoDB ด้วยนะครับ เนื่องจากประเภทการจัดเก็บข้อมูลนี้สนับสนุนการทำทรานแซคชั่น(transactioin) นั่นเอง

ผมเขียนตัวอย่างมาให้ดู รวบยอดมาเลย ตั้งแต่เรื่อง การติดต่อฐานข้อมูล mysql , การประกาศประเภท Error Message, การทำ Prepared statements และสุดท้ายการเขียนสนับสนุนการทำทรานแซคชั่นด้วย pdo



  Code
<?php
try {
// เปิดการเชื่อมต่อกับฐานข้อมูล
$Conn = new PDO(
'mysql:host=localhost;
dbname=test;
charset=utf8',
'root',
'');
// กำหนด error message
$Conn->setAttribute(
PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION
);

// ค่าที่รับมาจากหน้าอื่น ๆ เช่นรับค่าผ่านมาทาง GET, POST
$email1 = 'aa@hotmail.com';
$email2 = 'bb@hotmail.com';

$value1 = 'New aaName';
$value2 = 'New bbName';

// ประกาศการเริ่มต้น Transaction
$Conn->beginTransaction();

// SQL ที่ 1
$SQL = 'Update members SET name=? WHERE email=?';
$param = array( $value1, $email1 );
// ใช้คำสั่ง prepare sql ของเรา
$pSQL = $Conn->prepare( $SQL );
// ประมวลผลคำสั่ง SQL 1
$pSQL->execute($param);

// SQL ที่ 2
$SQL = 'Update members SET name=? WHERE email=? ';
$param = array( $value2, $email2 );
// ใช้คำสั่ง prepare sql ของเรา
$pSQL = $Conn->prepare( $SQL );
// ประมวลผลคำสั่ง SQL
$pSQL->execute($param);

// ถ้าทุกอย่างไม่ผิดพลาด ก็ยืนยันการบันทึกข้อมูล
$Conn->commit();
}
catch(PDOException $ex) {
// ถ้ามีบางอย่างผิดพลาด ก็ให้ rollback ทั้งหมดไม่บันทึก
$Conn->rollBack();
die($ex->getMessage());
}



จากตัวอย่างการเขียนด้านบน แสดงให้เห็นถึงการใช้ สนับสนุนการเขียนแบบทรานแซคชั่น โดยทำงานทั้งหมด 2 คำสั่งอัพเดทข้อมูล แต่หากคำสั่งใดคำสั่งหนึ่งเกิดความผิดพลาด ก็จะถูกโยนออกมาด้วย PDOException อีกที และ rollback คำสั่งทั้งหมด

การทำ transaction มีประโยชน์มาก สำหรับในการทำงานจริง ๆ เนื่องจากเราต้องต้องมีการอัพเดทข้อมูล table หลายๆ table ต่อ 1 transaction เช่น ระบบ Order ระบบบัญชี และอื่น ๆ เป็นต้น เราจึงต้องทำ transaction เพื่อป้องกันการผิดพลาดอันอาจเกิดจากเหตุต่าง ๆ หรือความผิดพลาดอื่น ๆที่ เราอาจไม่คาดคิดที่อาจเกิดขึ้นได้


ขึ้นไปด้านบน