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

ซึ่งก็เป็นคำสั่งพื้นฐานของการทำ 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 เพื่อป้องกันการผิดพลาดอันอาจเกิดจากเหตุต่าง ๆ หรือความผิดพลาดอื่น ๆที่ เราอาจไม่คาดคิดที่อาจเกิดขึ้นได้
ขึ้นไปด้านบน
