ID: 40417
Updated by: [EMAIL PROTECTED]
Reported By: exaton at free dot fr
-Status: Open
+Status: Feedback
Bug Type: PDO related
Operating System: Windows XP Pro SP2
PHP Version: 5.2.1
New Comment:
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
Previous Comments:
------------------------------------------------------------------------
[2007-02-09 16:39:14] exaton at free dot fr
Description:
------------
I have just upgraded from PHP 5.2.0 to PHP 5.2.1, and one of my scripts
has broken on the following point (note, the backend database is
PostgreSQL 8.1.5) :
Consider this prepared statement query, automatically generated as part
of a basic search engine operating on a table of shops :
SELECT indx, name, town FROM shops WHERE enabled AND (lower(name) LIKE
:word0 OR lower(address) LIKE :word0 OR lower(town) LIKE :word0 OR
lower(company) LIKE :word0 OR lower(description) LIKE :word0) ORDER BY
name;
You notice that 5 ':word0' tokens are defined. I then proceed to bind
':word0' to a certain value (individual $word taken from a search
field), *a single time* of course :
$shops -> bindValue(':word'.$i, '%'.$word.'%'); // $i = 0
Up to PHP 5.2.0, this worked as expected. Now in PHP 5.2.1 I am getting
a PDOException : "SQLSTATE[HY093]: Invalid parameter number: number of
bound variables does
not match number of tokens".
To work around this problem, I indeed have to call bindValue() as many
times as there are tokens (5 in this example), even though those tokens
are identical. As a consequence, the name of the extra *fictitious*
bound tokens does not matter, except that binding 5 times the same
token name (e.g. 5 times ':word0') does not work. But binding ':word0'
to ':word4' does, for instance.
I have noticed some similarity with PHP bug #33886, but I believe this
to be a slightly different situation (bindValue() as opposed to
on-the-fly binding), not to mention that it breaks existing scripts.
Thank you in advance for your feedback on this issue.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=40417&edit=1