我正在使用禁用自动提交的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 Query分类。

然后我将代码更改为此:

    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()也会起作用吗?

提前致谢。

最佳答案

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

仅需一个查询,您就不需要交易。如果查询失败,则数据库中没有任何更改,也意味着没有任何回滚。因此,不会有任何性能差异。

10-06 00:47