Bug #69257 [Com]: Error on PDO MySQL non-emulated statements and repeating the same named param
| From: | sebastiaanlokhorst at gmail dot com | Date: | Tue, 09 Jan 2018 19:20:56 +0000 |
| Subject: | Bug #69257 [Com]: Error on PDO MySQL non-emulated statements and repeating the same named param | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-213447@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=69257&edit=1
ID: 69257
Comment by: sebastiaanlokhorst at gmail dot com
Reported by: jrbasso at gmail dot com
Summary: Error on PDO MySQL non-emulated statements and
repeating the same named param
Status: Open
Type: Bug
Package: PDO MySQL
Operating System: Any
PHP Version: 5.6.6
Block user comment: N
Private report: N
New Comment:
This bug is still present in PHP 7.2.
The crazy thing is that it is well known and even expected to fail since the addition mysqlnd
support in PDO_mysql in 2008.
In the pdo_mysql_prepare_native_dup_named_placeholder.phpt test[1], this exact scenario is tested,
and it's expected to fail with
"Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number in %s on line
%d"
https://github.com/php/php-src/blob/master/ext/pdo_mysql/tests/pdo_mysql_prepare_native_dup_named_placeholder.phpt
Previous Comments:
------------------------------------------------------------------------
[2015-03-18 16:00:39] jrbasso at gmail dot com
Description:
------------
When using prepared statements with named parameters that repeats in the statement work fine in
emulated prepared statements, but doesn't work in non-emulated mode.
The test script is a simple way to reproduce it.
Test script:
---------------
<?php
$pdo = new PDO('mysql:unix_socket=/var/run/mysqld/mysqld.sock;dbname=test;charset=utf8',
'test', 'test');
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare('SELECT :a = :a');
$stmt->bindValue(':a', 1, PDO::PARAM_INT);
$stmt->execute();
var_dump($stmt->fetchAll(PDO::FETCH_COLUMN));
Expected result:
----------------
array(1) {
[0]=>
string(1) "1"
}
Actual result:
--------------
PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]:
Invalid parameter number' in /home/vagrant/shared/test.php:10
Stack trace:
#0 /home/vagrant/shared/test.php(10): PDOStatement->execute()
#1 {main}
thrown in /home/vagrant/shared/test.php on line 10
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=69257&edit=1