From: Andrey Hristov Date: Tue, 8 Nov 2005 13:50:50 +0000 (+0000) Subject: on 32bit platform if the column is UNSIGNED INT(11) and the value X-Git-Tag: php-5.1.0RC5~35 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=00a9f063f8bbd165562fe7bd38c759393324fa84;p=php on 32bit platform if the column is UNSIGNED INT(11) and the value 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) --- diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c index 0d62e34487..8f6d778c01 100644 --- a/ext/mysqli/mysqli_api.c +++ b/ext/mysqli/mysqli_api.c @@ -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));