mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
MFB: Fixed a bug with PDO::FETCH_COLUMN|PDO::FETCH_GROUP mode when a column
# by which to group by data is specified.
This commit is contained in:
parent
2f5e6e896e
commit
f4078bfc73
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user