Có hai vấn đề để thực hiện giao dịch.
1 - MyISAM không phải là công cụ giao dịch, do đó hãy thay đổi công cụ bảng thành InnoDB.
2 - Truy vấn giao dịch ("START TRANSACTION;"
HOẶC "ROLLBACK;"
) kết nối phải giống với các truy vấn khác (Chèn hoặc Cập nhật).
Để thực hiện điều này trong ZF2, bạn sẽ nhận được bộ chuyển đổi db hiện tại và sử dụng nó trong tất cả các truy vấn.
Mã này sẽ không làm việc một cách chính xác:
$this->getAdapter()->getDriver()->getConnection()->beginTransaction();
//do some jobs - e.g : multiple tables update or insert.
$this->getAdapter()->getDriver()->getConnection()->rollback();
Kể từ $this->getAdapter()->getDriver()->getConnection()
Tạo kết nối db mới.
Sử dụng đoạn mã sau thay vì:
$connection = $this->getAdapter()->getDriver()->getConnection();
$connection->beginTransaction();
//do some jobs - e.g : multiple tables update or insert.
$connection->rollback();
Đối với kiểm tra nếu kết nối của bạn là đúng, chỉ cần kích hoạt tính năng đăng nhập truy vấn trong mysql.
Sau khi chạy truy vấn, bạn sẽ thấy số kết nối trước mỗi truy vấn trong nhật ký mysql.Điều này phải giống nhau trong tất cả truy vấn giao dịch.
Nguồn
2014-03-09 10:25:32
Rất cám ơn Charles - Tôi sẽ cần đọc và đọc cẩn thận qua API, về điểm cuối cùng của bạn để phát hành trực tiếp tôi sẽ làm việc thông qua PDO để thực hiện việc này. –