sql >> Database >  >> RDS >> Mysql

PHP PDO - Er is geen actieve transactie

De antwoorden van Peter en Richard zijn al correct, maar er zit een klein foutje in de code van de transactiestructuur (en ik kan geen commentaar toevoegen).

De $connection->beginTransaction() moet buiten de try vallen -catch blok. Wanneer u de beginTransaction() . start in de try -block en uw Database Operations genereert een uitzondering, de catch -block weet niets van een actieve transactie. U krijgt dus dezelfde foutmelding:

Dus de structuur zou ook moeten zijn:

  1. Verkrijg de verbinding.
  2. Start de transactie met $connection->beginTransaction()
  3. Open de try -catch blok.

De try -blok bevat de $connection->commit() na DB-bewerkingen.

De catch -blok bevat de $connection->rollback() voor een worp Uitzondering.

Dus je code zou er als volgt uit moeten zien:

$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. Linkervulling in SQL Server – 3 LPAD()-equivalenten

  2. HBase-tabel exporteren naar mysql

  3. probleem met GROUP_CONCAT in JOIN-query mysql

  4. Evolutie van fouttolerantie in PostgreSQL:replicatiefase