]> granicus.if.org Git - php/commitdiff
on 32bit platform if the column is UNSIGNED INT(11) and the value
authorAndrey Hristov <andrey@php.net>
Tue, 8 Nov 2005 13:50:50 +0000 (13:50 +0000)
committerAndrey Hristov <andrey@php.net>
Tue, 8 Nov 2005 13:50:50 +0000 (13:50 +0000)
is greater than 2^31-1 then convert to string. on 64bit this is of no
problem because there long inside zval is big enough to keep unsigned
int(11)

ext/mysqli/mysqli_api.c

index 0d62e34487095bf1e360ee3538425a46f593b311..8f6d778c0121b14ba03b187b3276784ad0aaa376 100644 (file)
@@ -609,6 +609,7 @@ PHP_FUNCTION(mysqli_stmt_fetch)
        unsigned int    i;
        ulong                   ret;
        int                             lval;
+       unsigned int    ulval;
        double                  dval;
        my_ulonglong    llval;
        
@@ -639,8 +640,23 @@ PHP_FUNCTION(mysqli_stmt_fetch)
                        if (!stmt->result.is_null[i]) {
                                switch (stmt->result.buf[i].type) {
                                        case IS_LONG:
-                                               memcpy(&lval, stmt->result.buf[i].val, sizeof(lval));
-                                               ZVAL_LONG(stmt->result.vars[i], lval);
+                                               if ((sizeof(long) ==4) && (stmt->stmt->fields[i].type == MYSQL_TYPE_LONG) 
+                                                   && (stmt->stmt->fields[i].flags & UNSIGNED_FLAG)) 
+                                               {
+                                                       /* unsigned int (11) */
+                                                       char tmp[12];
+                                                       memcpy (&ulval, stmt->result.buf[i].val, sizeof(lval));
+                                                       if (ulval > INT_MAX) {
+                                                               sprintf((char *)&tmp, "%u", ulval);
+                                                               ZVAL_STRING(stmt->result.vars[i], tmp, 1);
+                                                       } else {
+                                                               memcpy(&lval, stmt->result.buf[i].val, sizeof(lval));
+                                                               ZVAL_LONG(stmt->result.vars[i], lval);                                  
+                                                       }
+                                               } else {
+                                                       memcpy(&lval, stmt->result.buf[i].val, sizeof(lval));
+                                                       ZVAL_LONG(stmt->result.vars[i], lval);
+                                               }
                                                break;
                                        case IS_DOUBLE:
                                                memcpy(&dval, stmt->result.buf[i].val, sizeof(dval));