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)
This commit is contained in:
Andrey Hristov 2005-11-08 13:50:50 +00:00
parent 270640283e
commit 00a9f063f8

View 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));