mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
MFH:
Add float conversions too. Float users should understand how float works!!!
This commit is contained in:
parent
2fced40b76
commit
8bb2465a51
5 changed files with 15 additions and 7 deletions
|
@ -777,7 +777,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 */
|
||||
|
|
|
@ -1711,8 +1711,8 @@ MYSQLND_METHOD(mysqlnd_conn, set_client_option)(MYSQLND * const conn,
|
|||
conn->options.net_read_buffer_size = *(uint*) value;
|
||||
break;
|
||||
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
|
||||
case MYSQLND_OPT_INT_AND_YEAR_AS_INT:
|
||||
conn->options.int_and_year_as_int = *(uint*) value;
|
||||
case MYSQLND_OPT_INT_AND_FLOAT_NATIVE:
|
||||
conn->options.int_and_float_native = *(uint*) value;
|
||||
break;
|
||||
#endif
|
||||
case MYSQL_OPT_CONNECT_TIMEOUT:
|
||||
|
|
|
@ -136,7 +136,7 @@ typedef enum mysqlnd_option
|
|||
MYSQLND_OPT_NUMERIC_AND_DATETIME_AS_UNICODE = 200,
|
||||
#endif
|
||||
#ifdef MYSQLND_STRING_TO_INT_CONVERSION
|
||||
MYSQLND_OPT_INT_AND_YEAR_AS_INT = 201,
|
||||
MYSQLND_OPT_INT_AND_FLOAT_NATIVE = 201,
|
||||
#endif
|
||||
MYSQLND_OPT_NET_CMD_BUFFER_SIZE = 202,
|
||||
MYSQLND_OPT_NET_READ_BUFFER_SIZE = 203,
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue