@@ -763,36 +763,35 @@ static bool do_fetch(pdo_stmt_t *stmt, zval *return_value, enum pdo_fetch_type h
763
763
764
764
/* When fetching a column we only do one value fetch, so handle it separately */
765
765
if (how == PDO_FETCH_COLUMN ) {
766
- int colno = stmt -> fetch .column ;
767
-
768
- if ((flags & PDO_FETCH_GROUP ) && stmt -> fetch .column == -1 ) {
769
- colno = 1 ;
766
+ int fetch_column_number = stmt -> fetch .column ;
767
+ int group_column_number = 0 ;
768
+
769
+ /* For an explicit column fetch with PDO_FETCH_GROUP, the group and fetch column is 1 */
770
+ if (stmt -> fetch .column != -1 ) {
771
+ if (flags == PDO_FETCH_GROUP ) {
772
+ group_column_number = 1 ;
773
+ fetch_column_number = 1 ;
774
+ }
775
+ } else {
776
+ if (flags == PDO_FETCH_GROUP || flags == PDO_FETCH_UNIQUE ) {
777
+ fetch_column_number = 1 ;
778
+ }
770
779
}
771
780
772
- if (colno < 0 ) {
781
+ if (fetch_column_number < 0 ) {
773
782
zend_value_error ("Column index must be greater than or equal to 0" );
774
783
return false;
775
784
}
776
785
777
- if (colno >= stmt -> column_count ) {
786
+ if (fetch_column_number >= stmt -> column_count ) {
778
787
zend_value_error ("Invalid column index" );
779
788
return false;
780
789
}
781
790
782
- if (flags == PDO_FETCH_GROUP && stmt -> fetch .column == -1 ) {
783
- fetch_value (stmt , return_value , 1 , NULL );
784
- } else if (flags == PDO_FETCH_GROUP && colno ) {
785
- fetch_value (stmt , return_value , 0 , NULL );
786
- } else {
787
- fetch_value (stmt , return_value , colno , NULL );
788
- }
791
+ fetch_value (stmt , return_value , fetch_column_number , NULL );
789
792
790
793
if (group_key ) {
791
- if (flags == PDO_FETCH_GROUP && stmt -> fetch .column > 0 ) {
792
- fetch_value (stmt , group_key , colno , NULL );
793
- } else {
794
- fetch_value (stmt , group_key , 0 , NULL );
795
- }
794
+ fetch_value (stmt , group_key , group_column_number , NULL );
796
795
convert_to_string (group_key );
797
796
}
798
797
return true;
0 commit comments