]> granicus.if.org Git - php/commitdiff
Another fix for test fail
authorXinchen Hui <laruence@php.net>
Thu, 13 Nov 2014 06:23:25 +0000 (14:23 +0800)
committerXinchen Hui <laruence@php.net>
Thu, 13 Nov 2014 06:23:25 +0000 (14:23 +0800)
ext/pdo/pdo_stmt.c

index 705d08bacf582db893bb8622139508ece23dfe66..dbc98c6e5f3b222caf6dcc17aa69734741098fa8 100644 (file)
@@ -2486,6 +2486,7 @@ static zval *row_prop_read(zval *object, zval *member, int type, void **cache_sl
        pdo_stmt_t *stmt = row->stmt;
        int colno = -1;
        zval zobj;
+       zend_long lval;
 
        ZVAL_NULL(rv);
        if (stmt) {
@@ -2493,6 +2494,11 @@ static zval *row_prop_read(zval *object, zval *member, int type, void **cache_sl
                        if (Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < stmt->column_count) {
                                fetch_value(stmt, rv, Z_LVAL_P(member), NULL TSRMLS_CC);
                        }
+               } else if (Z_TYPE_P(member) == IS_STRING
+                          && is_numeric_string_ex(Z_STRVAL_P(member), Z_STRLEN_P(member), &lval, NULL, 0, NULL) == IS_LONG)    {
+                       if (lval >= 0 && lval < stmt->column_count) {
+                               fetch_value(stmt, rv, lval, NULL TSRMLS_CC);
+                       }
                } else {
                        convert_to_string(member);
                        /* TODO: replace this with a hash of available column names to column
@@ -2541,19 +2547,24 @@ static int row_prop_exists(zval *object, zval *member, int check_empty, void **c
        pdo_row_t *row = (pdo_row_t *)Z_OBJ_P(object);
        pdo_stmt_t *stmt = row->stmt;
        int colno = -1;
+       zend_long lval;
 
        if (stmt) {
                if (Z_TYPE_P(member) == IS_LONG) {
                        return Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < stmt->column_count;
+               } else if (Z_TYPE_P(member) == IS_STRING) {
+                       if (is_numeric_string_ex(Z_STRVAL_P(member), Z_STRLEN_P(member), &lval, NULL, 0, NULL) == IS_LONG)      {
+                               return lval >=0 && lval < stmt->column_count;
+                       }
                } else {
                        convert_to_string(member);
+               }
 
-                       /* TODO: replace this with a hash of available column names to column
-                        * numbers */
-                       for (colno = 0; colno < stmt->column_count; colno++) {
-                               if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) {
-                                       return 1;
-                               }
+               /* TODO: replace this with a hash of available column names to column
+                * numbers */
+               for (colno = 0; colno < stmt->column_count; colno++) {
+                       if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) {
+                               return 1;
                        }
                }
        }