Thursday, December 04, 2025

PHP Firebird changes in 2025 : 5.0.2 up through 6.1.1-RC.2.

I fetched the release notes for FirebirdSQL/php-firebird and made a concise summary of the user-visible changes and upgrade impact for versions from PHP Firebird 5.0.2 up through 6.1.1-RC.2.


I retrieved the release entries for 5.0.2, 6.1.1-RC.0, 6.1.1-RC.1 and 6.1.1-RC.2 and distilled the highlights and upgrade impact into a short, actionable summary below.


Summary of changes (5.0.2 → 6.1.1-RC.2)


- PHP Firebird 5.0.2 (published 2025-04-24)

  - Implemented INT128 support; values converted to string in PHP (PHP has no native 128-bit integer).

  - Removed trailing whitespaces on CHAR data types.

  - Added Windows installation requirement notes.

  - Impact: INT128 columns will appear as strings — check code that expects numeric types.


- PHP Firebird 6.1.1-RC.0 (published 2025-11-05)

  - Added IBASE_LOCK_TIMEOUT transaction option.

  - Added support for Firebird 4/5 types: INT128, DECFLOAT, TIME WITH TIMEZONE, TIMESTAMP WITH TIMEZONE.

  - New INI options:

    - ibase.default_trans_params (e.g., IBASE_READ | IBASE_NOWAIT)

    - ibase.default_lock_timeout (seconds; used together with IBASE_LOCK_TIMEOUT)

  - Support for long metadata (long table/field names).

  - Introduced IBASE_VER constant.

  - Various optimizations and bug fixes.

  - Note: Firebird 4/5 features require fbclient 4/5 dynamic library available in PATH.

  - Impact: to use the new types/features, ensure fbclient is updated and on PATH; consider configuring the new INI options for default transaction behavior.


- PHP Firebird 6.1.1-RC.1 (published 2025-11-06)

  - New function: ibase_get_client_version().

  - Build/runtime change: no compile-time dependency on fb_get_master_interface() and fb_get_statement_interface(); the extension now checks for these interfaces dynamically in the fbclient library.

  - A number of smaller fixes.

  - Impact: improved compatibility with varying fbclient builds; you can query client version from PHP.


- PHP Firebird 6.1.1-RC.2 (published 2025-11-10)

  - New functions: ibase_get_client_major_version(), ibase_get_client_minor_version().

  - Addressed multiple issues (referenced as #22, #78, #88, #91, #92, #95, #96 in release notes).

  - Possible breaking changes called out:

    - ibase_close() now closes the connection immediately instead of decreasing a reference count (see issue #22). Impact: code relying on previous refcount-based behavior may see connections closed sooner.

    - Fetching TIME fields with the IBASE_UNIXTIME flag now returns time as a string instead of negative values. Impact: code expecting numeric/negative values should be updated to handle string results.

  - Impact: review uses of ibase_close() and any code relying on previous reference-count semantics; update time-handling code that uses IBASE_UNIXTIME.


Upgrade checklist / recommendations

- Test your application against the new release candidates before deploying to production — RC releases are marked prerelease and the maintainers asked for thorough testing.

- If you rely on Firebird 4/5 types (INT128, DECFLOAT, timezone-aware TIME/TIMESTAMP), make sure the corresponding fbclient 4/5 library is installed and found via PATH on your system.

- Audit code that:

  - Expects INT128 as numeric — now strings.

  - Uses ibase_close() expecting refcounted behavior — adapt to immediate close semantics.

  - Fetches TIME values with IBASE_UNIXTIME — expect strings now; update parsing logic.

- Consider setting or reviewing the new INI options:

  - ibase.default_trans_params

  - ibase.default_lock_timeout

- Use the new client-version functions (ibase_get_client_version(), ibase_get_client_major_version(), ibase_get_client_minor_version()) for runtime checks to adapt behavior based on client capabilities.

- Run full test-suite / integration tests focusing on transactions, lock timeouts, date/time handling, and any code interacting with long metadata names.


If you want, I can:

- Produce a one-page compatibility guide you can share with your team listing code snippets to change (e.g., ibase_close migration notes, TIME parsing examples).

- Run a quick code-scan (if you provide code or repo) to highlight likely places that need changes for the ibase_close and TIME/INT128 changes. 

No comments: