diff --git a/NEWS b/NEWS index 73d7145593f6..f395c9fa658c 100644 --- a/NEWS +++ b/NEWS @@ -41,6 +41,8 @@ PHP NEWS - PDO: . Fixed a duplicate warning when ATTR_STATEMENT_CLASS is rejected on a persistent connection. (Ilia Alshanetsky) + . Fixed constructor option errors naming argument #3 ($password) instead + of argument #4 ($options). (Ilia Alshanetsky) - Phpdbg: . Fix wrong command names. (ndossche, Weilin Du) diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index f5a16f20aefa..fcb1ff4498a3 100644 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -516,7 +516,7 @@ PDO_API void php_pdo_internal_construct_driver(INTERNAL_FUNCTION_PARAMETERS, zen ZVAL_DEREF(attr_value); /* TODO: Should the constructor fail when the attribute cannot be set? */ - pdo_dbh_attribute_set(dbh, long_key, attr_value, 3); + pdo_dbh_attribute_set(dbh, long_key, attr_value, 4); } ZEND_HASH_FOREACH_END(); } diff --git a/ext/pdo/tests/pdo_constructor_option_argnum.phpt b/ext/pdo/tests/pdo_constructor_option_argnum.phpt new file mode 100644 index 000000000000..5aebe0b4a2a5 --- /dev/null +++ b/ext/pdo/tests/pdo_constructor_option_argnum.phpt @@ -0,0 +1,38 @@ +--TEST-- +PDO Common: Constructor option errors report $options as argument #4 +--EXTENSIONS-- +pdo +--SKIPIF-- + +--FILE-- + 999], [PDO::ATTR_STATEMENT_CLASS => 'PDOStatement']] as $options) { + putenv("PDOTEST_ATTR=" . serialize($options)); + try { + PDOTest::factory(PDO::class, $useConnectMethod); + } catch (Error $e) { + echo $e::class, ": ", $e->getMessage(), "\n"; + } + } + + putenv("PDOTEST_ATTR=" . serialize([PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_NUM])); + $db = PDOTest::factory(PDO::class, $useConnectMethod); + var_dump($db->getAttribute(PDO::ATTR_DEFAULT_FETCH_MODE) === PDO::FETCH_NUM); +} +?> +--EXPECT-- +ValueError: PDO::__construct(): Argument #4 ($options) Error mode must be one of the PDO::ERRMODE_* constants +TypeError: PDO::__construct(): Argument #4 ($options) PDO::ATTR_STATEMENT_CLASS value must be of type array, string given +bool(true) +ValueError: PDO::connect(): Argument #4 ($options) Error mode must be one of the PDO::ERRMODE_* constants +TypeError: PDO::connect(): Argument #4 ($options) PDO::ATTR_STATEMENT_CLASS value must be of type array, string given +bool(true)