如果一个查询失败,为什么事务不回滚?

时间:2018-09-05 11:44:50

标签: php pdo transactions

下面的代码我只是没有在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();
}

1 个答案:

答案 0 :(得分:2)

除非您告知PDO,否则PDO不会引发异常。

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);