From: Ilia Alshanetsky Date: Fri, 11 Jan 2008 01:48:19 +0000 (+0000) Subject: MFB: Fixed a bug with PDO::FETCH_COLUMN|PDO::FETCH_GROUP mode when a column X-Git-Tag: RELEASE_2_0_0a1~952 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f4078bfc733024325d5b3248afdc7a1441509e73;p=php MFB: Fixed a bug with PDO::FETCH_COLUMN|PDO::FETCH_GROUP mode when a column # by which to group by data is specified. --- diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 7f6cdb972c..00aa9eff40 100755 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -860,6 +860,7 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, int flags = how & PDO_FETCH_FLAGS, idx, old_arg_count = 0; zend_class_entry *ce = NULL, *old_ce = NULL; zval grp_val, *grp, **pgrp, *retval, *old_ctor_args = NULL; + int colno; how = how & ~PDO_FETCH_FLAGS; if (how == PDO_FETCH_USE_DEFAULT) { @@ -875,6 +876,12 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, return 1; } + if (flags & PDO_FETCH_GROUP && stmt->fetch.column == -1) { + colno = 1; + } else { + colno = stmt->fetch.column; + } + if (return_value) { int i = 0; @@ -916,8 +923,12 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, break; case PDO_FETCH_COLUMN: - if (stmt->fetch.column >= 0 && stmt->fetch.column < stmt->column_count) { - fetch_value(stmt, return_value, stmt->fetch.column, NULL TSRMLS_CC); + if (colno >= 0 && colno < stmt->column_count) { + if (flags == PDO_FETCH_GROUP && stmt->fetch.column == -1) { + fetch_value(stmt, return_value, 1, NULL TSRMLS_CC); + } else { + fetch_value(stmt, return_value, colno, NULL TSRMLS_CC); + } if (!return_all) { return 1; } else { @@ -1020,7 +1031,11 @@ static int do_fetch(pdo_stmt_t *stmt, int do_bind, zval *return_value, if (return_all) { INIT_PZVAL(&grp_val); - fetch_value(stmt, &grp_val, i, NULL TSRMLS_CC); + if (flags == PDO_FETCH_GROUP && how == PDO_FETCH_COLUMN && stmt->fetch.column > 0) { + fetch_value(stmt, &grp_val, colno, NULL TSRMLS_CC); + } else { + fetch_value(stmt, &grp_val, i, NULL TSRMLS_CC); + } convert_to_string(&grp_val); if (how == PDO_FETCH_COLUMN) { i = stmt->column_count; /* no more data to fetch */ @@ -1503,7 +1518,7 @@ static PHP_METHOD(PDOStatement, fetchAll) switch(ZEND_NUM_ARGS()) { case 0: case 1: - stmt->fetch.column = how & PDO_FETCH_GROUP ? 1 : 0; + stmt->fetch.column = how & PDO_FETCH_GROUP ? -1 : 0; break; case 2: convert_to_long(arg2);