ID: 44251
Comment by: tsteiner at nerdclub dot net
Reported By: om at viazenetti dot de
Status: Open
Bug Type: PDO related
Operating System: Linux
PHP Version: 5.2.5
New Comment:
This bug is a direct result of the fix for Bug #36798.
The patch for that bug removed code in the parser that would ignore an
escaped quote when inside of quotes (ie: "foo\"bar" or 'foo\'bar').
This causes the parser to think it has found the end of quoted text,
when it has not. Because of this, ? characters after an escaped quote
are treated as placeholders. Additionally, I have found it causes the
parser to parse beyond the end of the query and into unknown memory
contents.
It looks like Bug #36798 needs to be reopened!
Previous Comments:
------------------------------------------------------------------------
[2008-02-26 11:11:13] om at viazenetti dot de
Description:
------------
If a question mark and an escaped singel quote appear in a where
statement as value, the PDO method prepare tries to bind a value to the
question mark.
Because no values are passed, pdo throws an exception (Only tested with
where statements):
PDOStatement::execute() [function.PDOStatement-execute]:
SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in
Reproduce code:
---------------
<?php
$db = new PDO('mysql:host=localhost;dbname=DATABASE', 'USER',
'PASSWORD');
$sth = $db->prepare("SELECT * FROM `TABLE` WHERE (login =
'?\'')");
$sth->execute();
var_dump($sth->fetch());
Expected result:
----------------
Array or false
Actual result:
--------------
Exception: PDOStatement::execute() [function.PDOStatement-execute]:
SQLSTATE[HY093]: Invalid parameter number: no parameters were bound in
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=44251&edit=1