Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sử dụng đúng cách tự động gửi và khôi phục php mysqli

Bạn sử dụng nó khi bạn có một loạt câu lệnh sql phải được thực hiện cùng nhau để duy trì tính nhất quán trong cơ sở dữ liệu của bạn. Hãy nghĩ về việc gọi cam kết giống như thiết lập một điểm lưu trong một trò chơi. Bất cứ khi nào bạn gọi rollback, bạn sẽ hoàn tác mọi thứ đã được thực hiện theo cam kết trước đó.

Hãy tưởng tượng một tình huống mà bạn cần lưu hóa đơn trong bảng hóa đơn, thông tin chi tiết trong bảng bill_details và các khoản thanh toán trong bảng thanh toán của bạn. Để duy trì tính nhất quán, bạn cần đảm bảo rằng tất cả những việc này đã được hoàn thành hoặc không có cái nào trong số chúng được thực hiện. Nếu bạn thêm hóa đơn và thông tin chi tiết vào đâu và sau đó không thể chèn thanh toán thì cơ sở dữ liệu của bạn sẽ ở trạng thái không nhất quán.

Thông thường, điều này được thực hiện bằng cách sử dụng khối try / catch như sau:

try {
    $dbconnect->autocommit(false);

    $stmt = $dbconnect->prepare("INSERT INTO `invoices`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val1,$val2);
    $stmt->execute();

    $stmt = $dbconnect->prepare("INSERT INTO `invoice_details`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val3,$val4);
    $stmt->execute();

    $stmt = $dbconnect->prepare("INSERT INTO `payments`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val5,$val6);
    $stmt->execute();

    $dbconnect->commit();
} catch(Exception $e){
    // undo everything that was done in the try block in the case of a failure.
    $dbconnect->rollback();

    // throw another exception to inform the caller that the insert group failed.
    throw new StorageException("I couldn't save the invoice");
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bộ lọc $ không hoạt động trong JPA / Olingo 2.0.11 với MySQL

  2. MySQLi count (*) luôn trả về 1

  3. UNPIVOT dữ liệu mysql sang bảng khác

  4. cập nhật các hàng thay vì tạo cơ sở dữ liệu mục nhập mới android

  5. Khi nào sử dụng SELECT ... FOR UPDATE?