Hi Calvin!

On 26.03.2021 at 15:51, Calvin Buckley wrote:

> I've been looking into improving PDO_ODBC; specifically, bringing it up
> to parity with other drivers, as well as dealing with its quirks. The
> company I work for supports PHP on IBM i, and while we maintain the
> native database drivers for the platform, we (and IBM) have been
> recommending new applications migrate to ODBC.
>
> However, the procedural ODBC driver does have some limitations like no
> in/out parameters (which is a very common thing with stored procedures
> here, unfortunately). PDO_ODBC does support this, but we've noticed
> some issues:

Yes, I think PDO_ODBC is the way to go.  I'd leave ext/odbc alone
regarding new features; I think it's mostly useful to support legacy
code.  The only general downsides of PDO_ODBC I can think of, are issues
with ODBC specific functionality (while PDO offers extension hooks,
these are not well-received for a long time), and the unfortunate fact
that statements are "going_long" (and stay that way), i.e. for column
sizes >= 256 use SQLGetData() instead of SQLBindCol() what appears to be
subpar performancewise.

>  * Persistent connections aren't checked, even though the procedural
>    ODBC driver does. This has bitten some of our clients, so we have a
>    patch for them that does impement this; this is PR GH-6805.

That PR looks basically good to me (I've already commented there that
SQL_ATTR_CONNECTION_DEAD is likely the better alternative).

>  * Many of the connection attributes don't seem to be implemented; some
>    of these seem trivial to implement, others less so.
>  * In/out parameters require users to remember to specify size and add
>    one for the null terminator. I'm not familar with other ODBC drivers
>    to call this a driver/platform quirk, PDO_ODBC limitation, or
>    something else, but figuring out a good solution for this would make
>    life easier for users.

TIL.  I don't know about other PDO drivers, but this is something that
should be improved for PDO_ODBC.  I'm not sure about the details, but it
should be doable.

>  * As always, ODBC being a generic abstraction later itself bites us
>    (i.e no standard way to get last ID).
>
> I'm curious if anyone has suggestions for what to be done or how to get
> these done.

Regarding the "how": I think PRs are the way forward.  Some might need
discussion on this ML or even an RFC; some may be considered bug fixes,
and as such should have an accompanying bug ticket, but a PR is a good
start.

--
Christoph M. Becker

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to