From:             ipernet at gmail dot com
Operating system: Slackware 13 x64
PHP version:      5.4.16
Package:          PDO related
Bug Type:         Bug
Bug description:MySQL + EMULATE_PREPARES = false cause HY093 error with non 
unique parameters

Description:
------------
PHP:
5.4.16

PDO Client API version:
mysqlnd 5.0.10 - 20111026

MySQL:
5.5.18-log (same on 5.6.10-log)

When using "PDO::ATTR_EMULATE_PREPARES => false" with a PDO prepared
statement, 
the query fails if it refers to the same named parameter more than once.

Work OK with "PDO::ATTR_EMULATE_PREPARES => true"



Test script:
---------------
CREATE TABLE IF NOT EXISTS `test` (
  `id` int(10) unsigned NOT NULL,
  `date` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

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

********************
* Common test code *
********************

$pdo = new PDO('mysql:host=<HOST>;dbname=<DB>', '<USER>', '<PWD>',
array(PDO::ATTR_EMULATE_PREPARES => false));


**********
* Test 1 *
**********
         
$query  =       $pdo->prepare('INSERT INTO test(id, date) VALUES(:id, :date) ON
DUPLICATE KEY UPDATE date = :date');
                
$query->bindValue(':id', 5);
$query->bindValue(':date', time());
                
if( ! $query->execute())
        var_dump($query->errorInfo());


**********
* Test 2 *
**********

$query  =       $pdo->prepare('INSERT INTO test(id, date) VALUES(:date, 
:date)');
                
$query->bindValue(':date', time());
                
if( ! $query->execute())
        var_dump($query->errorInfo());



**********
* Test 3 *
**********

$query  =       $pdo->prepare('INSERT INTO test(id, date) VALUES(:date,
:date2)');
                
$query->bindValue(':date', time());
$query->bindValue(':date2', time());

if( ! $query->execute())
        var_dump($query->errorInfo());

Expected result:
----------------
No error and an inserted row in DB for both test 1, 2 and 3.

Actual result:
--------------
Test 1 & 2 don't work and return:

array(3) { [0] => string(5) "HY093" [1] => NULL [2] => NULL } 

Test 3 works as it does not refer to the same named parameter more than
once.

- If you change "PDO::ATTR_EMULATE_PREPARES" to "true", all tests work
fine.


-- 
Edit bug report at https://bugs.php.net/bug.php?id=65149&edit=1
-- 
Try a snapshot (PHP 5.4):   
https://bugs.php.net/fix.php?id=65149&r=trysnapshot54
Try a snapshot (PHP 5.3):   
https://bugs.php.net/fix.php?id=65149&r=trysnapshot53
Try a snapshot (trunk):     
https://bugs.php.net/fix.php?id=65149&r=trysnapshottrunk
Fixed in SVN:               https://bugs.php.net/fix.php?id=65149&r=fixed
Fixed in release:           https://bugs.php.net/fix.php?id=65149&r=alreadyfixed
Need backtrace:             https://bugs.php.net/fix.php?id=65149&r=needtrace
Need Reproduce Script:      https://bugs.php.net/fix.php?id=65149&r=needscript
Try newer version:          https://bugs.php.net/fix.php?id=65149&r=oldversion
Not developer issue:        https://bugs.php.net/fix.php?id=65149&r=support
Expected behavior:          https://bugs.php.net/fix.php?id=65149&r=notwrong
Not enough info:            
https://bugs.php.net/fix.php?id=65149&r=notenoughinfo
Submitted twice:            
https://bugs.php.net/fix.php?id=65149&r=submittedtwice
register_globals:           https://bugs.php.net/fix.php?id=65149&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=65149&r=php4
Daylight Savings:           https://bugs.php.net/fix.php?id=65149&r=dst
IIS Stability:              https://bugs.php.net/fix.php?id=65149&r=isapi
Install GNU Sed:            https://bugs.php.net/fix.php?id=65149&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=65149&r=float
No Zend Extensions:         https://bugs.php.net/fix.php?id=65149&r=nozend
MySQL Configuration Error:  https://bugs.php.net/fix.php?id=65149&r=mysqlcfg

Reply via email to