Browse Source

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)
PHP-5.1
Andrey Hristov 20 years ago
parent
commit
00a9f063f8
  1. 20
      ext/mysqli/mysqli_api.c

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

Loading…
Cancel
Save