mirror of
https://github.com/php/php-src.git
synced 2024-12-01 05:43:38 +08:00
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:
parent
270640283e
commit
00a9f063f8
@ -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…
Reference in New Issue
Block a user