Re: [PHP-DB] oci_commit always returns true even when the transaction fails.
[email protected] (Christopher Jones)
| Newsgroups | php.db |
|---|---|
| Message-ID | <[email protected]> |
Chris wrote:
> Christopher Jones wrote:
>>
>>
>> Chris wrote:
>> > ZeYuan Zhang wrote:
>> >> Hi there.
>> >>
>> >> Why oci_commit function always returns true even when the transaction
>> >> fails.
>> >> I just copied the code in the php manual [Example 1636. oci_commit()
>> >> example],
>> >> and runned it, the situation is as follows:
>> >>
>> >> * The statements do commit at the moment when oci_commit executes.
>> >> * But some statements are committed to oracle successfully, when some
>> >> fails.
>> >> I think it cannot be called a transaction, and I did used
>> >> OCI_DEFAULT in the oci_execute function.
>> >>
>> >> Code:
>> >> <?php
>> >> $conn = oci_connect('scott', 'tiger');
>> >> $stmt = oci_parse($conn, "INSERT INTO employees (name, surname)
>> VALUES
>> >> ('Maxim', 'Maletsky')");
>> >> oci_execute($stmt, OCI_DEFAULT);
>> >
>> > Reading the docs (straight from
>> > http://www.php.net/manual/en/function.oci-commit.php).
>> >
>> > A transaction begins when the first SQL statement that changes data is
>> > executed with oci_execute() using the OCI_NO_AUTO_COMMIT flag.
>> >
>> > You need to
>> >
>> > oci_execute($stmt, OCI_NO_AUTO_COMMIT);
>> >
>>
>> OCI_NO_AUTO_COMMIT is a recently introduced alias for OCI_DEFAULT, so
>> the original code is equivalent. This could be made clearer in the
>> oci_commit documentation, but is explained on
>> http://www.php.net/manual/en/function.oci-execute.php, which is where
>> the flag is actually used.
>
> Fair enough, thanks for the clarification :)
>
No problems.
Chris
--
Email: [email protected]
Tel: +1 650 506 8630
Blog: http://blogs.oracle.com/opal/
Free PHP Book: http://tinyurl.com/ugpomhome