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