oci_commit

Commits the outstanding database transaction

&reftitle.description; `bool` `oci_commit` `resource` `connection`

Commits the outstanding transaction for the Oracle `connection`. A commit ends the current transaction and makes permanent all changes. It releases all locks held.

A transaction begins when the first SQL statement that changes data is executed with `oci_execute` using the `OCI_NO_AUTO_COMMIT` flag. Further data changes made by other statements become part of the same transaction. Data changes made in a transaction are temporary until the transaction is committed or rolled back. Other users of the database will not see the changes until they are committed.

When inserting or updating data, using transactions is recommended for relational data consistency and for performance reasons.

&reftitle.parameters;

`connection`

- An Oracle connection identifier, returned by `oci_connect`, `oci_pconnect`, or `oci_new_connect`.

&reftitle.returnvalues;

&return.success;

&reftitle.examples;

### `oci_commit` example

    <?php

    // Insert into several tables, rolling back the changes if an error occurs

    $conn = oci_connect('hr', 'welcome', 'localhost/XE');

    $stid = oci_parse($conn, "INSERT INTO mysalary (id, name) VALUES (1, 'Chris')");

    // The OCI_NO_AUTO_COMMIT flag tells Oracle not to commit the INSERT immediately
    $r = oci_execute($stid, OCI_NO_AUTO_COMMIT);
    if (!$r) {
        $e = oci_error($stid);
        trigger_error(htmlentities($e['message']), E_USER_ERROR);
    }

    $stid = oci_parse($conn, 'INSERT INTO myschedule (startday) VALUES (12)');
    $r = oci_execute($stid, OCI_NO_AUTO_COMMIT);
    if (!$r) {
        $e = oci_error($stid);
        oci_rollback($conn);  // rollback changes to both tables
        trigger_error(htmlentities($e['message']), E_USER_ERROR);
    }

    // Commit the changes to both tables
    $r = oci_commit($conn);
    if (!$r) {
        $e = oci_error($conn);
        trigger_error(htmlentities($e['message']), E_USER_ERROR);
    }

    ?>

&reftitle.notes;

Transactions are automatically rolled back when you close the connection, or when the script ends, whichever is soonest. You need to explicitly call `oci_commit` to commit the transaction.

Any call to `oci_execute` that uses `OCI_COMMIT_ON_SUCCESS` mode explicitly or by default will commit any previous uncommitted transaction.

Any Oracle DDL statement such as `CREATE` or `DROP` will automatically commit any uncommitted transaction.

&reftitle.seealso;

- `oci_execute`
- `oci_rollback`