下面的代码我只是没有在fQuery
语句中添加第三个参数,第二个查询是正确的。但是据我了解,如果第一个查询失败,则事务将提供原子性,而不是第二个查询,则不应该执行,但是在我的代码中,第一个查询给出错误,第二个查询成功执行。
$db = new PDO("mysql:host=127.0.0.1;dbname=stock",'root','') ;
$name = 'name' ;
$mobile = 1234567890 ;
$email = 'email@gmail.com' ;
try {
$db->beginTransaction();
$fQuery = "INSERT INTO investor (name,mobile,email) values (:n,:m,:e) " ;
$fstmt = $db->prepare($fQuery) ;
$fstmt->execute([':n'=>$name,':m'=>$mobile]);
$sQuery = "INSERT INTO testing (name) values (:e) " ;
$sstmt = $db->prepare($sQuery) ;
$sstmt->execute([':e'=>$email]);
$db->commit();
} catch (Exception $e) {
$db->rollBack();
echo "Failed: " . $e->getMessage();
}
答案 0 :(得分:2)
除非您告知PDO,否则PDO不会引发异常。
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);