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 は機能しません。また、ドキュメントには、トランザクションがない場合、rollBack が例外をスローすると記載されています。

クエリが 1 つだけの場合は、既にトランザクションは必要ありません。クエリが失敗した場合、データベースで何も変更されていません。また、ロールバックするものがないことも意味します。したがって、パフォーマンスの違いはありません。

于 2012-12-25T13:58:28.053 に答える