User Contributed Notes 7 notes

It is not possible to use interbase/firebird without initiating transactions. It seems that transactions are not automatically committed or rolled back at the end of a script, so remember to end all interbase enabled scripts with ibase_rollback() or ibase_commit().

Worse is, that if you use ibase_pconnect (recommended), transactions survive from one request to the next. So that if you don't rollback your transaction at the end of the script, another user's request might continue the transaction that the first request opened.

This has two implications:1) Clicking refresh in your browser won't make you see newer data, because you still watch data from the same transaction.2) Some php scripts might fail occassionally and not fail in other occasions, depending on with apache server thread and thereby which transaction they start using.

Unfortunately, there is no such thing asif (ibase_intransaction()) ibase_rollback();

so be sure that ALL your scripts end with an ibase_rollback() or ibase_commit();

For those who have problem with returning values from Stored Procedures in PHP-Interbase, I have found a solution. Use a select sentence like this:
select * from sp_prodecure(param, ...)
However, it is important that the procedure has a SUSPEND statement or else the procedure won't return any values.

But the "message length" (see above note) bug that you encounter when you try to execute a procedure should be fixed !

// Query$sql="SELECT * FROM table;"$result=ibase_query($res,$sql) or die(ibase_errmsg());while($row=ibase_fetch_object($result)){// use $row->FIELDNAME not $row->fieldnameprint $row->FIELDNAME;}ibase_free_result($result);

// Closingibase_close($res) or die("<br>" . ibase_errmsg());?>

The following code can be used when creating tables in order to get auto incrementing fields: