diff options
author | Matteo Beccati <mbeccati@php.net> | 2015-06-12 01:57:22 +0200 |
---|---|---|
committer | Matteo Beccati <mbeccati@php.net> | 2015-06-12 02:05:28 +0200 |
commit | b60efdce9fe7e168ba37070a4307269483a66ea4 (patch) | |
tree | 6aa823efd29f7e9f37431672efa6977d94feb476 /ext/pdo_pgsql | |
parent | 7c0b8f872e3c15d50b1dc2d35be3674c24f82bf6 (diff) | |
download | php-git-b60efdce9fe7e168ba37070a4307269483a66ea4.tar.gz |
Fix bug #69344 (PDO PgSQL Incorrect binding numeric array with gaps)
Diffstat (limited to 'ext/pdo_pgsql')
-rw-r--r-- | ext/pdo_pgsql/pgsql_statement.c | 4 | ||||
-rw-r--r-- | ext/pdo_pgsql/tests/bug69344.phpt | 44 |
2 files changed, 46 insertions, 2 deletions
diff --git a/ext/pdo_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c index 75c5a4a041..51402c3e53 100644 --- a/ext/pdo_pgsql/pgsql_statement.c +++ b/ext/pdo_pgsql/pgsql_statement.c @@ -294,8 +294,8 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data * sizeof(Oid)); } if (param->paramno >= 0) { - if (param->paramno >= zend_hash_num_elements(stmt->bound_param_map)) { - pdo_pgsql_error_stmt(stmt, PGRES_FATAL_ERROR, "HY105"); + if (param->paramno >= zend_hash_num_elements(stmt->bound_params)) { + pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "parameter was not defined" TSRMLS_CC); return 0; } diff --git a/ext/pdo_pgsql/tests/bug69344.phpt b/ext/pdo_pgsql/tests/bug69344.phpt new file mode 100644 index 0000000000..43498145ac --- /dev/null +++ b/ext/pdo_pgsql/tests/bug69344.phpt @@ -0,0 +1,44 @@ +--TEST-- +PDO PgSQL Bug #69344 (PDO PgSQL Incorrect binding numeric array with gaps) +--SKIPIF-- +<?php +if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not l$ +require dirname(__FILE__) . '/config.inc'; +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +PDOTest::skip(); +?> +--FILE-- +<?php + +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +$pdo = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); +$pdo->setAttribute (\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); +$pdo->setAttribute (\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC); + +$test = function () use ($pdo) { + $arr = [ + 0 => "a", + 2 => "b", + ]; + + $stmt = $pdo->prepare("SELECT (?)::text AS a, (?)::text AS b"); + + try { + $stmt->execute($arr); + var_dump($stmt->fetch()); + } catch (\Exception $e) { + echo $e->getMessage()."\n"; + } +}; + +$test(); + +$pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, true); + +$test(); + +?> +--EXPECT-- +SQLSTATE[HY093]: Invalid parameter number: parameter was not defined +SQLSTATE[HY093]: Invalid parameter number: parameter was not defined + |