我使用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()
也会有效吗?!
提前致谢。
答案 0 :(得分:0)
如果没有交易,rollBack将无效。同样在文档中,它表示如果没有事务,rollBack会抛出异常。
只有一个查询,您已经不需要交易了。如果查询失败,数据库中没有任何更改,也意味着没有任何内容可以回滚。因此,不会有任何性能差异。