From: Matteo Beccati Date: Mon, 5 Jan 2015 08:54:06 +0000 (+0100) Subject: Merge branch 'PHP-5.5' into PHP-5.6 X-Git-Tag: php-5.6.5RC1~10 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=488d3dac2e7d77223efb3bd4748e14e5b6be0156;p=php Merge branch 'PHP-5.5' into PHP-5.6 * PHP-5.5: Fixed bug #68371 PDO#getAttribute() cannot be called with platform-specific attribute names --- 488d3dac2e7d77223efb3bd4748e14e5b6be0156 diff --cc ext/pdo_pgsql/pgsql_driver.c index f347aaa0e4,a94688ca2e..5a78abfb61 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@@ -379,6 -379,14 +379,15 @@@ static int pdo_pgsql_get_attribute(pdo_ pdo_pgsql_db_handle *H = (pdo_pgsql_db_handle *)dbh->driver_data; switch (attr) { + case PDO_ATTR_EMULATE_PREPARES: + ZVAL_BOOL(return_value, H->emulate_prepares); + break; + + case PDO_PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT: ++ php_error_docref(NULL TSRMLS_CC, E_DEPRECATED, "PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT is deprecated, use PDO::ATTR_EMULATE_PREPARES instead"); + ZVAL_BOOL(return_value, H->disable_native_prepares); + break; + case PDO_ATTR_CLIENT_VERSION: ZVAL_STRING(return_value, PG_VERSION, 1); break; diff --cc ext/pdo_pgsql/tests/bug68371.phpt index 0000000000,72b18919ef..a79da2af69 mode 000000,100644..100644 --- a/ext/pdo_pgsql/tests/bug68371.phpt +++ b/ext/pdo_pgsql/tests/bug68371.phpt @@@ -1,0 -1,99 +1,108 @@@ + --TEST-- + PDO PgSQL Bug #38671 (PDO#getAttribute() cannot be called with platform-specific attribute names) + --SKIPIF-- + + --FILE-- + setAttribute (\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); + + $attrs = array( + // Extensive test: default value and set+get values + PDO::PGSQL_ATTR_DISABLE_NATIVE_PREPARED_STATEMENT => array(null, true, false), + PDO::ATTR_EMULATE_PREPARES => array(null, true, false), + + // Just test the default + PDO::ATTR_AUTOCOMMIT => array(null), + PDO::ATTR_PREFETCH => array(null), + PDO::ATTR_TIMEOUT => array(null), + PDO::ATTR_ERRMODE => array(null), + PDO::ATTR_SERVER_VERSION => array(null), + PDO::ATTR_CLIENT_VERSION => array(null), + PDO::ATTR_SERVER_INFO => array(null), + PDO::ATTR_CONNECTION_STATUS => array(null), + PDO::ATTR_CASE => array(null), + PDO::ATTR_CURSOR_NAME => array(null), + PDO::ATTR_CURSOR => array(null), + PDO::ATTR_ORACLE_NULLS => array(null), + PDO::ATTR_PERSISTENT => array(null), + PDO::ATTR_STATEMENT_CLASS => array(null), + PDO::ATTR_FETCH_TABLE_NAMES => array(null), + PDO::ATTR_FETCH_CATALOG_NAMES => array(null), + PDO::ATTR_DRIVER_NAME => array(null), + PDO::ATTR_STRINGIFY_FETCHES => array(null), + PDO::ATTR_MAX_COLUMN_LEN => array(null), + PDO::ATTR_DEFAULT_FETCH_MODE => array(null), + ); + + foreach ($attrs as $a => $vals) { + foreach ($vals as $v) { + try { + if (!isset($v)) { + var_dump($pdo->getAttribute($a)); + } else { + $pdo->setAttribute($a, $v); + if ($pdo->getAttribute($a) === $v) { + echo "OK\n"; + } else { + throw new \Exception('KO'); + } + } + } catch (\Exception $e) { + if ($e->getCode() == 'IM001') { + echo "ERR\n"; + } else { + echo "ERR {$e->getMessage()}\n"; + } + } + } + } + + ?> + --EXPECTF-- ++Deprecated: PDO::getAttribute(): %s + bool(false) ++ ++Deprecated: PDO::setAttribute(): %s ++ ++Deprecated: PDO::getAttribute(): %s + OK ++ ++Deprecated: PDO::setAttribute(): %s ++ ++Deprecated: PDO::getAttribute(): %s + OK + bool(false) + OK + OK + ERR + ERR + ERR + int(2) + string(%d) "%s" + string(%d) "%s" + string(%d) "%s" + string(31) "%s" + int(2) + ERR + ERR + int(0) + bool(false) + array(1) { + [0]=> + string(12) "PDOStatement" + } + ERR + ERR + string(5) "pgsql" + ERR + ERR + int(4) +