summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/mysqli/mysqli.c2
-rw-r--r--ext/mysqlnd/mysqlnd_structs.h2
-rw-r--r--ext/mysqlnd/mysqlnd_wireprotocol.c12
3 files changed, 12 insertions, 4 deletions
diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c
index 7562e94632..89bee8c58f 100644
--- a/ext/mysqli/mysqli.c
+++ b/ext/mysqli/mysqli.c
@@ -783,7 +783,7 @@ PHP_MINIT_FUNCTION(mysqli)
REGISTER_LONG_CONSTANT("MYSQLI_OPT_NET_READ_BUFFER_SIZE", MYSQLND_OPT_NET_READ_BUFFER_SIZE, CONST_CS | CONST_PERSISTENT);
#endif
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
- REGISTER_LONG_CONSTANT("MYSQLI_OPT_INT_AND_YEAR_AS_INT", MYSQLND_OPT_INT_AND_YEAR_AS_INT, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("MYSQLI_OPT_INT_AND_FLOAT_NATIVE", MYSQLND_OPT_INT_AND_FLOAT_NATIVE, CONST_CS | CONST_PERSISTENT);
#endif
/* mysqli_real_connect flags */
diff --git a/ext/mysqlnd/mysqlnd_structs.h b/ext/mysqlnd/mysqlnd_structs.h
index 2f6dcfa2e1..2385aff6aa 100644
--- a/ext/mysqlnd/mysqlnd_structs.h
+++ b/ext/mysqlnd/mysqlnd_structs.h
@@ -177,7 +177,7 @@ typedef struct st_mysqlnd_option
zend_bool numeric_and_datetime_as_unicode;
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
- zend_bool int_and_year_as_int;
+ zend_bool int_and_float_native;
#endif
unsigned int net_read_buffer_size;
} MYSQLND_OPTION;
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c
index d6e4715483..0dc013df41 100644
--- a/ext/mysqlnd/mysqlnd_wireprotocol.c
+++ b/ext/mysqlnd/mysqlnd_wireprotocol.c
@@ -1467,7 +1467,7 @@ void php_mysqlnd_rowp_read_text_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffer,
zend_uchar *bit_area = (zend_uchar*) row_buffer->ptr + data_size + 1; /* we allocate from here */
zend_bool as_unicode = conn->options.numeric_and_datetime_as_unicode;
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
- zend_bool as_int = conn->options.int_and_year_as_int;
+ zend_bool as_int_or_float = conn->options.int_and_float_native;
#endif
DBG_ENTER("php_mysqlnd_rowp_read_text_protocol");
@@ -1551,7 +1551,7 @@ void php_mysqlnd_rowp_read_text_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffer,
}
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
- if (as_int && perm_bind.php_type == IS_LONG &&
+ if (as_int_or_float && perm_bind.php_type == IS_LONG &&
perm_bind.pack_len <= SIZEOF_LONG)
{
zend_uchar save = *(p + len);
@@ -1580,6 +1580,14 @@ void php_mysqlnd_rowp_read_text_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffer,
}
}
*(p + len) = save;
+ } else if (as_int_or_float && perm_bind.php_type == IS_DOUBLE)
+ {
+ zend_uchar save = *(p + len);
+ /* We have to make it ASCIIZ temporarily */
+ *(p + len) = '\0';
+ double v = atof((char *) p);
+ ZVAL_DOUBLE(*current_field, v);
+ *(p + len) = save;
} else
#endif /* MYSQLND_STRING_TO_INT_CONVERSION */
if (fields_metadata[i].type == MYSQL_TYPE_BIT) {