Re: Fwd: [PHP-BUG] Bug #73234 [NEW]: emulated statementslet value dictate parameter type

From: Date: Tue, 04 Oct 2016 15:00:19 +0000
Subject: Re: Fwd: [PHP-BUG] Bug #73234 [NEW]: emulated statementslet value dictate parameter type
References: 1 2 3 4 5 6 7 8  Groups: php.internals 
Request: Send a blank email to internals+get-96225@lists.php.net to get a copy of this message
Hi, On 04/10/2016 16:33, Christoph M. Becker wrote: > On 04.10.2016 at 16:20, Matteo Beccati wrote: > >> Hi, >> >> On 04/10/2016 16:15, Adam Baratz wrote: >>>> >>>>>> 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), […] If you grep from PDO_ATTR_EMULATE_PREPARES you won't find anything in core using it other than the mysql/pgsql drivers. It's more or less a missing feature in the other drivers. Back to the main topic, I agree it is a bug but we'd need to be careful as the fix might cause issues in existing applications and libraries, especially given EMULATE is on by default on pdo_mysql. I wouldn't target anything less than master without careful testing beforehand. We also should probably bit the bullet sometime soon and finally disable it by default on pdo_mysql too. Cheers -- Matteo Beccati Development & Consulting - http://www.beccati.com/

« previous php.internals (#96225) next »