From 4e6c2b468cf280e464e2ceb7e3be816ee5b402dd Mon Sep 17 00:00:00 2001 From: Zeev Suraski Date: Fri, 16 Jul 1999 17:06:48 +0000 Subject: [PATCH] * Get the mSQL module up to date --- ext/msql/msql.c | 104 +++++++++++++++++++++++++----------------- ext/standard/string.c | 2 +- 2 files changed, 62 insertions(+), 44 deletions(-) diff --git a/ext/msql/msql.c b/ext/msql/msql.c index 5e20edde948..6e3d67f68d2 100644 --- a/ext/msql/msql.c +++ b/ext/msql/msql.c @@ -55,6 +55,12 @@ typedef struct msql_global_struct{ msql_module php3_msql_module; #endif + +#define MSQL_ASSOC 1<<0 +#define MSQL_NUM 1<<1 +#define MSQL_BOTH (MYSQL_ASSOC|MYSQL_NUM) + + function_entry msql_functions[] = { {"msql_connect", php3_msql_connect, NULL}, {"msql_pconnect", php3_msql_pconnect, NULL}, @@ -232,6 +238,10 @@ DLEXPORT int php3_minit_msql(INIT_FUNC_ARGS) msql_module_entry.type = type; + REGISTER_LONG_CONSTANT("MSQL_ASSOC", MSQL_ASSOC, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("MSQL_NUM", MSQL_NUM, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("MSQL_BOTH", MSQL_BOTH, CONST_CS | CONST_PERSISTENT); + return SUCCESS; } @@ -1007,44 +1017,10 @@ DLEXPORT PHP_FUNCTION(msql_num_fields) } /* }}} */ -/* {{{ proto array msql_fetch_row(int query) - Get a result row as an enumerated array */ -DLEXPORT PHP_FUNCTION(msql_fetch_row) -{ - pval *result; - m_result *msql_result; - m_row msql_row; - m_query *msql_query; - int type; - int num_fields; - int i; - MSQL_TLS_VARS; - - if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &result)==FAILURE) { - WRONG_PARAM_COUNT; - } - - MSQL_GET_QUERY(result); - if (!msql_result || - ((msql_row = msqlFetchRow(msql_result)) == NULL) || - (array_init(return_value)==FAILURE)) { - RETURN_FALSE; - } - num_fields = msqlNumFields(msql_result); - - for (i=0; ivalue.lval; + break; + default: + WRONG_PARAM_COUNT; + break; } MSQL_GET_QUERY(result); @@ -1074,23 +1067,48 @@ static PHP_FUNCTION(msql_fetch_hash) msqlFieldSeek(msql_result,0); for (msql_field=msqlFetchField(msql_result),i=0; msql_field; msql_field=msqlFetchField(msql_result),i++) { if (msql_row[i]) { + char *data; + int data_len; + int should_copy; + if (PG(magic_quotes_runtime)) { - add_get_index_string(return_value, i, _php3_addslashes(msql_row[i],0,NULL,0), (void **) &pval_ptr, 0); + data = _php3_addslashes(msql_row[i], 0, &data_len, 0); + should_copy = 0; } else { - add_get_index_string(return_value, i, msql_row[i], (void **) &pval_ptr, 1); + data = msql_row[i]; + data_len = strlen(data); + should_copy = 1; + } + + if (result_type & MSQL_NUM) { + add_index_stringl(return_value, i, data, data_len, should_copy); + should_copy = 1; + } + + if (result_type & MSQL_ASSOC) { + add_assoc_stringl(return_value, msql_field->name, data, data_len, should_copy); } } else { - add_get_index_stringl(return_value, i, empty_string, 0, (void **) &pval_ptr, 1); + //add_get_index_stringl(return_value, i, empty_string, 0, (void **) &pval_ptr, 1); } - _php3_hash_pointer_update(return_value->value.ht, msql_field->name, strlen(msql_field->name)+1, pval_ptr); } } + +/* {{{ proto array msql_fetch_row(int query) + Get a result row as an enumerated array */ +DLEXPORT PHP_FUNCTION(msql_fetch_row) +{ + php3_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, MSQL_NUM); +} +/* }}} */ + + /* {{{ proto object msql_fetch_object(int query) Fetch a result row as an object */ DLEXPORT PHP_FUNCTION(msql_fetch_object) { - php3_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU); + php3_msql_fetch_hash(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0); if (return_value->type==IS_ARRAY) { return_value->type=IS_OBJECT; return_value->value.obj.properties = return_value->value.ht; diff --git a/ext/standard/string.c b/ext/standard/string.c index 19ee22acdde..e645cda6f60 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -1261,7 +1261,7 @@ char *strerror(int errnum) PHPAPI char *_php3_addslashes(char *str, int length, int *new_length, int should_free) { /* maximum string length, worst case situation */ - char *new_str = (char *) emalloc((length?length:strlen(str))*2+1); + char *new_str = (char *) emalloc((length?length:(length=strlen(str)))*2+1); char *source,*target; char *end; char c;