Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पीएचपी पीडीओ - कोई सक्रिय लेनदेन नहीं है

पीटर और रिचर्ड्स के उत्तर पहले से ही सही हैं, लेकिन लेन-देन संरचना से कोड में एक छोटी सी गलती है (और मैं कोई टिप्पणी नहीं जोड़ सकता)।

$connection->beginTransaction() try . के बाहर होना चाहिए -catch खंड मैथा। जब आप प्रारंभ करते हैं beginTransaction() try . में -ब्लॉक और आपके डेटाबेस ऑपरेशन एक अपवाद फेंकते हैं, catch -ब्लॉक सक्रिय लेनदेन से कुछ नहीं जानता है। तो, आपको वही त्रुटि मिलती है:

तो संरचना भी ऐसी होनी चाहिए:

  1. कनेक्शन प्राप्त करें।
  2. लेन-देन शुरू करें $connection->beginTransaction() . के साथ
  3. खोलें try -catch ब्लॉक.

try -ब्लॉक में $connection->commit() . होता है डीबी ऑपरेशंस के बाद।

catch -ब्लॉक में $connection->rollback() . होता है थ्रो एक्सेप्शन से पहले।

तो आपका कोड इस तरह दिखना चाहिए:

$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. MySql url बनाने के लिए प्रीऑर्डर ट्री संशोधित करता है

  2. हैकर समाचार की तरह कैसे छाँटें

  3. क्या अर्धविराम द्वारा अलग किए गए mysql में एकाधिक प्रश्नों को चलाने का कोई स्मार्ट तरीका है;

  4. ग्लासफ़िश 4 और MySQL और JSTL

  5. PHP/MYSQL के साथ हटाने से पहले जावास्क्रिप्ट पुष्टि करें