diff options
| author | Jouni Ahto <jah@php.net> | 2000-08-16 01:03:20 +0000 |
|---|---|---|
| committer | Jouni Ahto <jah@php.net> | 2000-08-16 01:03:20 +0000 |
| commit | e85ba0901a6ff2e5f33bfd98dd4874d7675db746 (patch) | |
| tree | b44f7e2f7f8f336aad0c6fad96c049980aecb5c3 /ext/pgsql/pgsql.c | |
| parent | 81b8e08b13fd246a6cf40363d09f19210492bc1d (diff) | |
| download | php-git-e85ba0901a6ff2e5f33bfd98dd4874d7675db746.tar.gz | |
- Return NULL type when column is NULL, now that we have it in PHP4.
- Fixed a bug in handling NULL columns, PQgetvalue() doesn't return a NULL
pointer in this case, but a pointer to a string of 0 length...
Diffstat (limited to 'ext/pgsql/pgsql.c')
| -rw-r--r-- | ext/pgsql/pgsql.c | 62 |
1 files changed, 36 insertions, 26 deletions
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index c45d5563a9..f65a80dee9 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -883,10 +883,14 @@ PHP_FUNCTION(pg_result) RETURN_FALSE; } - return_value->value.str.val = PQgetvalue(pgsql_result, Z_LVAL_PP(row), field_offset); - return_value->value.str.len = (return_value->value.str.val ? strlen(return_value->value.str.val) : 0); - return_value->value.str.val = safe_estrndup(return_value->value.str.val,return_value->value.str.len); - return_value->type = IS_STRING; + if (PQgetisnull(pgsql_result, Z_LVAL_PP(row), field_offset)) { + return_value->type = IS_NULL; + } else { + return_value->value.str.val = PQgetvalue(pgsql_result, Z_LVAL_PP(row), field_offset); + return_value->value.str.len = (return_value->value.str.val ? strlen(return_value->value.str.val) : 0); + return_value->value.str.val = safe_estrndup(return_value->value.str.val,return_value->value.str.len); + return_value->type = IS_STRING; + } } /* }}} */ @@ -933,33 +937,39 @@ static void php_pgsql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type) } array_init(return_value); for (i = 0, num_fields = PQnfields(pgsql_result); i<num_fields; i++) { - element = PQgetvalue(pgsql_result, Z_LVAL_PP(row), i); - element_len = (element ? strlen(element) : 0); - if (element) { - char *data; - int data_len; - int should_copy=0; - - if (PG(magic_quotes_runtime)) { - data = php_addslashes(element, element_len, &data_len, 0); + if (PQgetisnull(pgsql_result, Z_LVAL_PP(row), i)) { + if (result_type & PGSQL_NUM) { + add_index_unset(return_value, i); } else { - data = safe_estrndup(element, element_len); - data_len = element_len; + field_name = PQfname(pgsql_result, i); + add_assoc_unset(return_value, field_name); } + } else { + element = PQgetvalue(pgsql_result, Z_LVAL_PP(row), i); + element_len = (element ? strlen(element) : 0); + if (element) { + char *data; + int data_len; + int should_copy=0; + + if (PG(magic_quotes_runtime)) { + data = php_addslashes(element, element_len, &data_len, 0); + } else { + data = safe_estrndup(element, element_len); + data_len = element_len; + } - if (result_type & PGSQL_NUM) { - add_index_stringl(return_value, i, data, data_len, should_copy); - should_copy=1; - } + if (result_type & PGSQL_NUM) { + add_index_stringl(return_value, i, data, data_len, should_copy); + should_copy=1; + } - if (result_type & PGSQL_ASSOC) { - field_name = PQfname(pgsql_result, i); - add_assoc_stringl(return_value, field_name, data, data_len, should_copy); + if (result_type & PGSQL_ASSOC) { + field_name = PQfname(pgsql_result, i); + add_assoc_stringl(return_value, field_name, data, data_len, should_copy); + } } - } else { - /* NULL field, don't set it */ - /* add_get_index_stringl(return_value, i, empty_string, 0, (void **) &pval_ptr); */ - } + } } } |
