Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PHP PDO - Tidak ada transaksi aktif

Jawaban Peter dan Richards sudah benar, tetapi ada satu kesalahan kecil dalam kode dari struktur transaksi (dan saya tidak dapat menambahkan komentar).

$connection->beginTransaction() harus berada di luar try -catch memblokir. Saat Anda memulai beginTransaction() di try -block dan Operasi Basis Data Anda membuat pengecualian, catch -block tidak mengetahui sesuatu dari transaksi yang aktif. Jadi, Anda mendapatkan kesalahan yang sama:

Jadi strukturnya juga harus:

  1. Dapatkan Koneksi.
  2. Mulai Transaksi dengan $connection->beginTransaction()
  3. Buka try -catch blokir.

try -block berisi $connection->commit() setelah Operasi DB.

catch -block berisi $connection->rollback() sebelum lemparan Pengecualian.

Jadi kode Anda akan terlihat seperti ini:

$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. Bagaimana saya bisa memetakan soket unix lokal ke soket inet?

  2. Menambahkan jeda baris dalam teks MySQL INSERT INTO

  3. MYSQL INNER JOIN untuk mendapatkan 3 jenis hasil

  4. Indeks set karakter awal yang tidak diketahui '255' diterima dari server

  5. Bagaimana cara membuat tautan permanen yang didorong oleh basis data?