PHP PDO&事务 - PHP 5.4和PHP 5.2.13上的不同行为

时间:2012-05-14 10:05:36

标签: php pdo php-5.2

对于以下代码,PHP 5.4和5.2.13之间是否存在一些显着差异?它适用于PHP 5.4(& mysql 5.1.62),不显示错误并执行查询。但是使用5.2.13(& mysql 5.1.3.0)它没有显示任何错误(它不会落入catch块)但是数据没有插入到数据库中

 $db = new PDO(DHOST, DUSER, DPASS, array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_EMULATE_PREPARES => true));
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

 try {
        $db->beginTransaction();
        $db->exec($insertString);
        $db->commit();
    } catch (Exception $e) {
        try {
            $db->rollBack();
            throwDbError($handler->errorInfo());
        } catch (Exception $e2) {
            ...
        }
    }

如果我省略beginTransactioncommit的行,它也适用于PHP 5.2,但我需要这些事务。 mysql数据库中的两个表都使用InnoDB

2 个答案:

答案 0 :(得分:1)

错误模式未设置为抛出异常。变化:

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

要:

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

两个PHP版本之间应该没有明显区别。

答案 1 :(得分:0)

您应该抓住PDOException,而不是Exception