PHP PDO กิจการและอัตโนมัติกระทำ
คู่มือการใช้งาน PHP PDO อ้างอิง
ตอนนี้เชื่อมต่อผ่าน PDO ไปในก่อนการเริ่มต้นของแบบสอบถามก่อนอื่นคุณต้องเข้าใจวิธีการ PDO คือการจัดการกิจการ
สนับสนุนการทำธุรกรรมคุณสมบัติสี่ (Acid):
- อะตอมมิกซิตี้ (อะตอมมิกซิตี้)
- ความสอดคล้อง (Consistency)
- การแยก (แยก)
- ถาวร (Durability)
อีกเพียงดำเนินการใด ๆ ดำเนินการในการทำธุรกรรมแม้จะค่อย ๆ ดำเนินการ แต่ยังให้การรับประกันความปลอดภัยที่ใช้กับฐานข้อมูลและจะไม่ถูกส่งในเวลาการรบกวนจากการเชื่อมต่ออื่น ๆ
การดำเนินงานการทำธุรกรรมยังสามารถเพิกถอนได้โดยอัตโนมัติเมื่อมีการร้องขอ (สมมติว่ายังไม่ได้ส่ง) ซึ่งทำให้ง่ายต่อการจัดการข้อผิดพลาดในสคริปต์
การทำธุรกรรมที่มักจะทำโดยจำนวนของการเปลี่ยนแปลง "เงินฝากออมทรัพย์" ขึ้นและได้รับอนุญาตแล้วจะมีผลบังคับใช้และดำเนินการ; ประโยชน์ของการทำเช่นนั้นคือการให้มีประสิทธิภาพเหล่านี้สามารถเปลี่ยนแปลงอย่างมาก
ในคำอื่น ๆ การทำธุรกรรมสามารถทำสคริปต์ของคุณได้เร็วขึ้นและมีประสิทธิภาพมากขึ้นที่อาจเกิดขึ้น (คุณยังคงต้องใช้พวกเขาอย่างถูกต้องที่จะเก็บเกี่ยวผลประโยชน์ดังกล่าว)
แต่น่าเสียดายที่ไม่ได้เป็นฐานข้อมูลทุกสนับสนุนธุรกรรมดังนั้นเมื่อคุณแรกเปิดการเชื่อมต่อ, PDO ต้องเรียกว่าโหมดการทำงาน "กระทำอัตโนมัติ"
อัตโนมัติกระทำโหมดหมายความว่าถ้าสนับสนุนฐานข้อมูลแต่ละเรียกใช้แบบสอบถามที่มีการทำธุรกรรมโดยนัยของตัวเองถ้าฐานข้อมูลไม่สนับสนุนการทำธุรกรรมไม่
หากคุณต้องการทำธุรกรรมคุณต้องใช้ PDO :: beginTransaction () วิธีการที่จะเริ่มต้น ถ้าโปรแกรมควบคุมพื้นฐานไม่สนับสนุนการทำธุรกรรมโยน PDOException ข้อยกเว้น (ไม่คำนึงถึงสิ่งที่ชนิดของการตั้งค่าการจัดการข้อผิดพลาดนี้เป็นเงื่อนไขข้อผิดพลาดร้ายแรง)
เมื่อทำธุรกรรมที่มีอยู่ PDO :: กระทำ () หรือ PDO :: ย้อนกลับ () เพื่อดำเนินการขึ้นอยู่กับรหัสการทำธุรกรรมจะทำงานประสบความสำเร็จ
หมายเหตุ: PDO เท่านั้นไม่ว่าจะเป็นความสามารถในการประมวลผลธุรกรรมในการตรวจสอบชั้นขับรถ หากบางส่วนสภาพ Runtime หมายความว่าการทำธุรกรรมไม่สามารถใช้ได้และบริการฐานข้อมูลยอมรับการร้องขอที่จะเริ่มต้นการทำธุรกรรม, PDO :: beginTransaction () จะยังคงส่งกลับ TRUE และไม่มีข้อผิดพลาด ลองใช้การทำธุรกรรมที่เป็นตัวอย่างที่ดีในตารางฐานข้อมูล MySQL MyISAM
เมื่อสคริปต์สิ้นสุดหรือการเชื่อมต่อเป็นเรื่องเกี่ยวกับที่จะปิดถ้าไม่มีการทำธุรกรรมเสร็จสมบูรณ์ PDO จะย้อนกลับโดยอัตโนมัติการทำธุรกรรม มาตรการรักษาความปลอดภัยนี้จะช่วยหลีกเลี่ยงความไม่สอดคล้องกันในสคริปต์ยุติโดยไม่คาดคิด - ถ้าไม่ชัดเจนกระทำธุรกรรมแล้วสมมติฐานที่ไม่ถูกต้องอยู่ที่ไหนสักแห่งเพื่อย้อนกลับจะดำเนินการเพื่อให้แน่ใจว่าการรักษาความปลอดภัยข้อมูล
หมายเหตุ: เฉพาะเริ่มต้นการทำธุรกรรม PDO :: beginTransaction () ต่อมามันอาจจะเกิดขึ้นโดยอัตโนมัติรีดกลับ ถ้าคุณออกแบบสอบถามเพื่อเริ่มต้นการทำธุรกรรมที่ PDO ไม่สามารถรู้เพื่อที่ว่าถ้ามีความจำเป็นไม่สามารถย้อนกลับ
ในการทำธุรกรรมการดำเนิน Batch:
ในตัวอย่างต่อไปสมมติว่าคุณสร้างชุดของรายการสำหรับพนักงานใหม่ให้กำหนดหมายเลข 23 คือ นอกเหนือไปจากข้อมูลพื้นฐานการลงทะเบียนคน แต่คุณยังต้องบันทึกเงินเดือนของเขา
การปรับปรุงทั้งสองจะเสร็จสมบูรณ์มันเป็นเรื่องง่ายมาก แต่โดยวิธีปิด PDO :: beginTransaction () และ PDO :: กระทำการโทร () ก็เป็นไปได้เพื่อให้มั่นใจว่าก่อนการเปลี่ยนแปลงที่คนอื่นไม่สามารถเห็นการเปลี่ยนแปลงเหล่านี้
หากมีข้อผิดพลาดเกิดขึ้นจับป้องกันการเปลี่ยนแปลงทั้งหมดตั้งแต่การทำธุรกรรมที่ถูกรีดกลับมาจากการเริ่มต้นและแสดงข้อความแสดงข้อผิดพลาด
<?php try { $dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2', array(PDO::ATTR_PERSISTENT => true)); echo "Connected\n"; } catch (Exception $e) { die("Unable to connect: " . $e->getMessage()); } try { $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction(); $dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')"); $dbh->exec("insert into salarychange (id, amount, changedate) values (23, 50000, NOW())"); $dbh->commit(); } catch (Exception $e) { $dbh->rollBack(); echo "Failed: " . $e->getMessage(); } ?>
ไม่ได้ จำกัด อยู่กับการเปลี่ยนแปลงในการทำธุรกรรมก็สามารถออกคำสั่งที่ซับซ้อนในการดึงข้อมูล แต่ยังจะสร้างการเปลี่ยนแปลงมากขึ้นและแบบสอบถามโดยใช้ข้อมูลที่มิเมื่อการทำธุรกรรมที่มีการใช้งานคุณสามารถมั่นใจได้ว่าคนอื่น ๆ ไม่สามารถทำให้เกิดการเปลี่ยนแปลงในการดำเนินงานในความคืบหน้า