我正在使用禁用自动提交的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引发异常。
仅需一个查询,您就不需要交易。如果查询失败,则数据库中没有任何更改,也意味着没有任何回滚。因此,不会有任何性能差异。