PDO statement execute enhancement

php.internals

Marian Kostadinov

20 years ago
I have a suggestion that is related a little to my bug report #38394 ( http://bugs.php.net/bug.php?id=38394). It's about the execution of a prepared statement. Let's say we have a prepared statement for UPDATE table SET field1 = :field1, field2 = :field3 WHERE id = :id in order to execute it we have something like this: $data = array ('id' => 3, 'field1' => 'value1', 'field2' => 'value2'); $stmt->execute ($data); But I think that it is so common to have things like this $data = array ('id' => 3, 'field1' => 'value1', 'field2' => 'value2', 'field3' => 'value3', 'field4' => 'value4'); $stmt->execute ($data); But that is not executed because we have some additional key/value pairs. So the idea is to allow this. Also I suggest we allow using object along with an array. This is a common situation also. But I have to ask you about the C implementation because it may need a lot of rewriting about this but if it is easy, it think it may be good to be done.

Derick Rethans

20 years ago
On Wed, 9 Aug 2006, Marian Kostadinov wrote:
> I have a suggestion that is related a little to my bug report #38394 ( > http://bugs.php.net/bug.php?id=38394). > > It's about the execution of a prepared statement. > Let's say we have a prepared statement for > > UPDATE table SET field1 = :field1, field2 = :field3 WHERE id = :id > > in order to execute it we have something like this: > $data = array ('id' => 3, 'field1' => 'value1', 'field2' => 'value2'); > $stmt->execute ($data); > > But I think that it is so common to have things like this > $data = array ('id' => 3, 'field1' => 'value1', 'field2' => 'value2', > 'field3' => 'value3', 'field4' => 'value4'); > $stmt->execute ($data); > > But that is not executed because we have some additional key/value pairs. > So the idea is to allow this. Also I suggest we allow using object along > with an array. This is a common situation also.
Actually, it is dependent on the driver what happens here, which is not at all documented either. However, it would be nice if this indeed would work. Derick
-- Derick Rethans http://derickrethans.nl | http://ez.no | http://xdebug.org

Michael Wallner

20 years ago
Derick Rethans wrote:
> On Wed, 9 Aug 2006, Marian Kostadinov wrote:
>> But that is not executed because we have some additional key/value pairs. >> So the idea is to allow this. Also I suggest we allow using object along >> with an array. This is a common situation also. > > Actually, it is dependent on the driver what happens here, which is not > at all documented either. However, it would be nice if this indeed would > work.
I second this. Regards,
-- Michael

Lukas Smith

20 years ago
Michael Wallner wrote:
> Derick Rethans wrote: >> On Wed, 9 Aug 2006, Marian Kostadinov wrote: > >>> But that is not executed because we have some additional key/value pairs. >>> So the idea is to allow this. Also I suggest we allow using object along >>> with an array. This is a common situation also. >> Actually, it is dependent on the driver what happens here, which is not >> at all documented either. However, it would be nice if this indeed would >> work. > > I second this.
Being able to use Objects probably only makes sense if we ignore additional keys that have not been defined as placeholders. I do not think that this change makes sense though. regards, Lukas

Marian Kostadinov

20 years ago
Yes, that's my idea - to ignore keys that are not defined as placeholder. And not only for objects but for arrays also. 2006/8/9, Lukas Smith <lsmith@php.net>:

Lukas Smith

20 years ago
Marian Kostadinov wrote:
> Yes, that's my idea - to ignore keys that are not defined as placeholder. > And not only for objects but for arrays also.
I do not know the implementation in PDO, but the implementation I made in MDB2 only tries to parse the placeholders if it has to emulate or detects that a placeholder type is used that needs to be rewritten for the given RDBMS. If PDO has a similar implementation it would mean now that PDO always has to parse the entire query to determine which keys to ignore. I feel this is suboptimal and therefore I would be opposed to this change. regards, Lukas

Marian Kostadinov

20 years ago
This code here http://lxr.php.net/source/php-src/ext/pdo/pdo_stmt.c#301 is maybe the point where a solution can be provided checking for param <http://lxr.php.net/ident?i=param>->paramno == -1 is enough to detect an incorrect parameter and silently ignore it or emit a notice. 2006/8/9, Lukas Smith <lsmith@php.net>: