ฉันไม่พบคำตอบที่แน่ชัดว่าได้รับอนุญาตให้ทำธุรกรรมใน PHP ครอบคลุมหลายฐานข้อมูลหรือไม่
ฉันใช้วัตถุการเชื่อมต่อเดียวกัน (mysqli) และทำธุรกรรมในลักษณะนี้:
$mysqli->autocommit(false);
try {
// Assume here that some code would throw an exception
$stmt = $mysqli->prepare("INSERT INTO db1.x (column) VALUES (y)");
$stmt->execute();
$stmt->close();
$stmt = $mysqli->prepare("INSERT INTO db2.x (column) VALUES (y)");
$stmt->execute();
$stmt->close();
$mysqli->commit();
// Great success
} catch (Exception $e) {
$mysqli->rollback();
throw $e; // handle elsewhere
}
สิ่งนี้ได้รับอนุญาตหรือไม่ และมันจะกระทำและย้อนกลับอย่างถูกต้องหรือไม่ ตามคู่มือ (http://dev.mysql.com/doc/refman/5.6/en/xa.html) และเธรดอื่นๆ บน SO ดูเหมือนว่าฉันจำเป็นต้องใช้คำสั่ง XA แต่ก็ไม่ชัดเจนจริงๆ (สำหรับฉัน) หากนี่คือเมื่อใช้เซิร์ฟเวอร์ฐานข้อมูลหลายตัว การเชื่อมต่อหลายรายการ หรือ โดยทั่วไปเมื่อรันโค้ดด้านบน