From: Ilia Alshanetsky Date: Wed, 31 Oct 2007 12:58:39 +0000 (+0000) Subject: MFB: Fixed bug #43139 PDO ignores ATTR_DEFAULT_FETCH_MODE in some cases with X-Git-Tag: RELEASE_2_0_0a1~1519 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5bae3d0f3cd4e0d3e78dfa8b8704e38db2137755;p=php MFB: Fixed bug #43139 PDO ignores ATTR_DEFAULT_FETCH_MODE in some cases with fetchAll() --- diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index c33b4a1d30..f1059948ae 100755 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -1236,7 +1236,7 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, } /* }}} */ -static int pdo_stmt_verify_mode(pdo_stmt_t *stmt, int mode, int fetch_all TSRMLS_DC) /* {{{ */ +static int pdo_stmt_verify_mode(pdo_stmt_t *stmt, long mode, int fetch_all TSRMLS_DC) /* {{{ */ { int flags = mode & PDO_FETCH_FLAGS; @@ -1522,6 +1522,10 @@ static PHP_METHOD(PDOStatement, fetchAll) } } + if ((how & ~PDO_FETCH_FLAGS) == PDO_FETCH_USE_DEFAULT) { + how |= stmt->default_fetch_type & ~PDO_FETCH_FLAGS; + } + if (!error) { PDO_STMT_CLEAR_ERR(); MAKE_STD_ZVAL(data); @@ -1890,6 +1894,7 @@ fail_out: case PDO_FETCH_OBJ: case PDO_FETCH_BOUND: case PDO_FETCH_NAMED: + case PDO_FETCH_KEY_PAIR: break; case PDO_FETCH_COLUMN: diff --git a/ext/pdo/tests/bug_43139.phpt b/ext/pdo/tests/bug_43139.phpt new file mode 100644 index 0000000000..04b9bf311e --- /dev/null +++ b/ext/pdo/tests/bug_43139.phpt @@ -0,0 +1,34 @@ +--TEST-- +PDO Common: Bug #43139 (PDO ignore ATTR_DEFAULT_FETCH_MODE in some cases with fetchAll()) +--SKIPIF-- + +--FILE-- +setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); +$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); + +var_dump($db->query('select 0 as abc, 1 as xyz, 2 as def')->fetchAll(PDO::FETCH_GROUP)); +?> +--EXPECT-- +array(1) { + [0]=> + array(1) { + [0]=> + array(2) { + ["xyz"]=> + string(1) "1" + ["def"]=> + string(1) "2" + } + } +}