1

我正在使用禁用自动提交的 MySQL PDO。

所以我有以下代码:

    try
    {
        $db_connect_handle->beginTransaction();
        $pdo_stmt_obj = self::$db_connect_handle->prepare($query_sql_str);
        $pdo_stmt_obj->execute();
        $db_connect_handle->commit();
    }
    catch (database_exception $e)
    {
        $db_connect_handle->rollBack();
        print_r($e);
    }

    echo $db_connect_handle->lastInsertId();

INSERT查询工作正常。但是,我没有得到$db_connect_handle->lastInsertId(). 我在提交之前阅读了我应该使用的 PHP 手册lastInsertId,但是我有一个中央查询脚本,我不想在提交事务之前进行任何 SQL 查询分类。

然后我将代码更改为:

    try
    {
        $pdo_stmt_obj = self::$db_connect_handle->prepare($query_sql_str.'; COMMIT;');
        $pdo_stmt_obj->execute();
    }
    catch (database_exception $e)
    {
        $db_connect_handle->rollBack();
        print_r($e);
    }

    echo $db_connect_handle->lastInsertId();

瞧!现在我得到了$db_connect_handle->lastInsertId().

我的问题是,这会影响 的性能,还会影响INSERT工作$db_connect_handle->rollBack()吗?!

提前致谢。

4

1 回答 1

0

如果没有事务,则回滚将不起作用。同样在文档中,它说如果没有事务,则 rollBack 抛出异常。

只有一个查询,您已经不需要事务。如果查询失败,数据库中没有任何变化,也意味着没有任何东西可以回滚。因此,不会有任何性能差异。

于 2012-12-25T13:58:28.053 回答