iliaa Fri Jan 11 01:48:19 2008 UTC Modified files: /php-src/ext/pdo pdo_stmt.c Log: MFB: Fixed a bug with PDO::FETCH_COLUMN|PDO::FETCH_GROUP mode when a column # by which to group by data is specified. http://cvs.php.net/viewvc.cgi/php-src/ext/pdo/pdo_stmt.c?r1=1.183&r2=1.184&diff_format=u Index: php-src/ext/pdo/pdo_stmt.c diff -u php-src/ext/pdo/pdo_stmt.c:1.183 php-src/ext/pdo/pdo_stmt.c:1.184 --- php-src/ext/pdo/pdo_stmt.c:1.183 Mon Dec 31 07:12:13 2007 +++ php-src/ext/pdo/pdo_stmt.c Fri Jan 11 01:48:19 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: pdo_stmt.c,v 1.183 2007/12/31 07:12:13 sebastian Exp $ */ +/* $Id: pdo_stmt.c,v 1.184 2008/01/11 01:48:19 iliaa Exp $ */ /* The PDO Statement Handle Class */ @@ -860,6 +860,7 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php