>
> >>>>> Well, I'm pretty sure Postgres won't be affected either way, because
> >>> its type system is such that you can't prepare a query where the types
> of
> >>> parameters can't be decided yet. A query like this simply gives an
> error.
> >>>>
> >>>> Firebird, oracle and mysql would have exactly the same problem. The
> >>>> prepare SQL script is invalid so prepare fails. If it works for dblib
> >>>> then I would consider THAT the bug. Parameters can only be assigned to
> >>>> fields identified in the prepared SQL. In this case :null has nothing
> to
> >>>> identify what it is to be prepared to populate.
> >>>
> >>> This is about *emulated* prepares, and AFAIK that means that the
> >>> database will never see the prepared statement.
> >>
> >>
> >> That's correct, but you can enable emulated prepares for whichever
> driver.
> >> A less confusing example might've been inserting :null into a nullable
> INT
> >> column and verifying that NULL was stored.
> >
> > That's not ture. If memory serves, emulated prepares are only available
> > supported by the mysql and pgsql pdo drivers.
>
> If that is so, the docs would be in error, e.g.
> <http://www.php.net/manual/en/pdo.setattribute.php> states:
>
> | PDO::ATTR_EMULATE_PREPARES […]
> | Use this setting to force PDO to either always emulate prepared
> | statements (if TRUE), […]


Yes, any driver can use emulated prepared statements:
https://github.com/php/php-src/blob/master/ext/pdo/pdo_stmt.c#L483
https://github.com/php/php-src/blob/master/ext/pdo/pdo_stmt.c#L1732

I'm happy to work on the bug fix. I'm leaning towards only applying it to
master in case others have coded around this behavior. I maintain
pdo_dblib, so I know that driver and its use cases pretty well. But since
this would affect more people, I wanted to take people's temperature on the
change.

Reply via email to