Edit report at https://bugs.php.net/bug.php?id=53960&edit=1

 ID:                 53960
 Comment by:         baptx dot is at gmail dot com
 Reported by:        contato at andersonfraga dot net
 Summary:            "Invalid parameter number" for multiple params
                     equals in query
 Status:             Not a bug
 Type:               Bug
 Package:            PDO related
 Operating System:   Windows
 PHP Version:        5.3.5
 Block user comment: N
 Private report:     N

 New Comment:

I've got this problem too, it's because of the PDO::ATTR_EMULATE_PREPARES => 
false parameter! It seems native prepared statements don't allow the same names 
in one SQL query...


Previous Comments:
------------------------------------------------------------------------
[2011-05-11 13:22:23] contato at andersonfraga dot net

Okay then...
Could put some 'warning' in the doc? Please ... ;)

------------------------------------------------------------------------
[2011-05-11 11:05:37] johan...@php.net

The old behavior is clearly wrong. You have explicit names and they are 
ignored....

------------------------------------------------------------------------
[2011-05-10 17:58:00] contato at andersonfraga dot net

Anyway... 
I think it should work, right?
'Even more because' it works in 5.2.14..

------------------------------------------------------------------------
[2011-05-10 10:03:11] u...@php.net

SQL - 2x hash_1:

             AND (NOME_CLIENTE LIKE :hash_1
                OR ENDERECO_CLIENTE LIKE :hash_1)


PHP bind - 1x hash_1, 1x hash_2:

        $statement->execute(Array(
                ':hash_1' => '%Anderson%',
                ':hash_2' => 0,

------------------------------------------------------------------------
[2011-02-08 17:27:49] contato at andersonfraga dot net

Description:
------------
This error is occurring when I use the same parameter several times in the 
query.
In PHP 5.2.14, using Gentoo, it works perfectly. Already in versions 5.3.0 and 
5.3.3 (using Windows on both), returns an exception.

Bug or 'feature'?

Test script:
---------------
<?php

try {
        $dbh = new PDO('mysql:/*irrelevant*/', Array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_EMULATE_PREPARES => false,
    ));

        $select = "SELECT * FROM PR_CLIENTE
           WHERE DELETADO = 'N'
             AND (NOME_CLIENTE LIKE :hash_1
                OR ENDERECO_CLIENTE LIKE :hash_1)
               ORDER BY ID_CLIENTE DESC
           LIMIT :hash_2;";

        $statement = $dbh->prepare($select);
        $statement->execute(Array(
                ':hash_1' => '%Anderson%',
                ':hash_2' => 0,
        ));

        $fetch = $statement->fetchAll(PDO::FETCH_ASSOC);
        print_r($fetch);
}
catch(PDOException $e) {
        print_r($e->getMessage());
}
?>

Expected result:
----------------
Array
(
    [0] => Array
        (
            [ID_CLIENTE] => 29
            (...)
        )

)


Actual result:
--------------
SQLSTATE[HY093]: Invalid parameter number


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=53960&edit=1

Reply via email to