iliaa Fri Jan 11 01:47:18 2008 UTC
Modified files: (Branch: PHP_5_3)
/php-src/ext/pdo pdo_stmt.c
Log:
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.118.2.38.2.24.2.8&r2=1.118.2.38.2.24.2.9&diff_format=u
Index: php-src/ext/pdo/pdo_stmt.c
diff -u php-src/ext/pdo/pdo_stmt.c:1.118.2.38.2.24.2.8
php-src/ext/pdo/pdo_stmt.c:1.118.2.38.2.24.2.9
--- php-src/ext/pdo/pdo_stmt.c:1.118.2.38.2.24.2.8 Mon Dec 31 07:17:11 2007
+++ php-src/ext/pdo/pdo_stmt.c Fri Jan 11 01:47:18 2008
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pdo_stmt.c,v 1.118.2.38.2.24.2.8 2007/12/31 07:17:11 sebastian Exp $ */
+/* $Id: pdo_stmt.c,v 1.118.2.38.2.24.2.9 2008/01/11 01:47:18 iliaa Exp $ */
/* The PDO Statement Handle Class */
@@ -894,6 +894,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;
if (how == PDO_FETCH_USE_DEFAULT) {
how = stmt->default_fetch_type;
@@ -909,6 +910,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;
@@ -945,8 +952,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 {
@@ -1049,7 +1060,11 @@
if (return_all && how != PDO_FETCH_KEY_PAIR) {
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 */
@@ -1527,7 +1542,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