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

PHP PDO - Không có giao dịch nào đang hoạt động

Câu trả lời của Peter và Richards đã đúng, nhưng có một lỗi nhỏ trong mã từ cấu trúc giao dịch (và tôi không thể thêm nhận xét).

$connection->beginTransaction() phải nằm ngoài try - catch khối. Khi bạn khởi động beginTransaction() trong try -block và Hoạt động Cơ sở dữ liệu của bạn ném ra một ngoại lệ, catch -block không biết điều gì đó từ một giao dịch đang hoạt động. Vì vậy, bạn gặp lỗi tương tự:

Vì vậy, cấu trúc cũng phải như vậy:

  1. Nhận kết nối.
  2. Bắt đầu Giao dịch với $connection->beginTransaction()
  3. Mở try - catch khối.

try -block chứa $connection->commit() sau Hoạt động DB.

catch -block chứa $connection->rollback() trước khi ném Ngoại lệ.

Vì vậy, mã của bạn sẽ giống như sau:

$tags_input = array(6,4,5);
$conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8',  
DB_USER, DB_PASSW, array(  
    PDO::ATTR_EMULATE_PREPARES => false,  
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));
} catch (Exception $e) {
  die("Unable to connect: " . $e->getMessage());
}    
//Begin Transaction
$conn->beginTransaction();   
try {  
    $sql = "INSERT INTO projects (id, pr_id, enabled) VALUES ( :val0, :val1, :val2)";
    $stmt = $conn->prepare($sql);  
    if(count($tags_input)>0){
            for($i = 0;$i<count($tags_input);$i++){
                    $stmt->bindValue(':val0', 57); 
                    $stmt->bindValue(':val1', $tags_input[$i]); 
                    $stmt->bindValue(':val2', 'Y'); 
                    $result = $stmt->execute();
            }
    }
$res1 = $conn->commit();    
} catch (Exception $e) {
  $conn->rollBack();
  echo "Failed: " . $e->getMessage();
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhóm MySQL theo các giá trị liên tiếp

  2. Lỗi MySQL 2006 (HY000) tại dòng 406:Máy chủ MySQL đã biến mất

  3. mysql - dấu thời gian tìm kiếm theo giờ trong ngày

  4. Làm thế nào để nhận được ngày đầu tiên của mỗi tháng tương ứng trong mysql?

  5. lấy theo vĩ độ và kinh độ trong laravel 5 với các tham gia khác