修改PDO INSERTS以增强lastInsertId用法

时间:2012-12-25 13:23:25

标签: mysql pdo

我使用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()也会有效吗?!

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果没有交易,rollBack将无效。同样在文档中,它表示如果没有事务,rollBack会抛出异常。

只有一个查询,您已经不需要交易了。如果查询失败,数据库中没有任何更改,也意味着没有任何内容可以回滚。因此,不会有任何性能差异。