]> granicus.if.org Git - php/commitdiff
- Revert latest commit
authorCorne' Cornelius <nobbie@php.net>
Wed, 19 Feb 2003 09:52:52 +0000 (09:52 +0000)
committerCorne' Cornelius <nobbie@php.net>
Wed, 19 Feb 2003 09:52:52 +0000 (09:52 +0000)
ext/informix/ifx.ec

index 816218ba704c2e54e160951f4dc0dc2b8a7165a8..7d167e713477a0afddf2e56ff25ac97c7e6a10a5 100644 (file)
 static void php_ifx_set_default_link(int id TSRMLS_DC);
 static long php_intifx_getType(long id, HashTable *list TSRMLS_DC);
 static long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list TSRMLS_DC);
-static long php_intifx_init_blob(loc_t *blob, long mode, long new TSRMLS_DC);
-static long php_intifx_init_blob_inmem(loc_t *blob, long new TSRMLS_DC);
-static long php_intifx_init_blob_infile(loc_t *blob, long new TSRMLS_DC);
-static void php_intifx_release_blob(loc_t *blob TSRMLS_DC);
 static long php_intifx_free_blob(long id, HashTable *list TSRMLS_DC);
+static long php_intifx2_free_blob(long id, HashTable *list TSRMLS_DC);
 static long php_intifx_get_blob(long bid, HashTable *list, char** content TSRMLS_DC);
 static long php_intifx_update_blob(long bid, char* param, long len, HashTable *list TSRMLS_DC);
 static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC);
-static char* php_intifx_create_tmpfile(TSRMLS_DC);
+static char* php_intifx_create_tmpfile(long bid TSRMLS_DC);
 static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC);
-static long php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC);
-static long php_intifx_preparse(char *statement TSRMLS_DC);
-static long php_intifx_count_descriptors(char *p_statemid TSRMLS_DC);
 static char* php_intifx_null(TSRMLS_D);
 static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS_DC);
 static long php_intifx_free_char(long id, HashTable *list TSRMLS_DC);
 static long php_intifx_update_char(long bid, char* param, long len, HashTable *list TSRMLS_DC);
 static long php_intifx_get_char(long bid, HashTable *list, char** content TSRMLS_DC);
 #if HAVE_IFX_IUS
-static long php_intifxus_create_slob(long create_mode, HashTable *list);
+static long php_intifxus_create_slob(long create_mode, HashTable *list TSRMLS_DC);
 static long php_intifxus_free_slob(long bid, HashTable *list TSRMLS_DC);
 static long php_intifxus_close_slob(long bid, HashTable *list TSRMLS_DC);
 static long php_intifxus_open_slob(long bid, long create_mode, HashTable *list TSRMLS_DC);
-static long php_intifxus_new_slob(HashTable *list);
+static long php_intifxus_new_slob(HashTable *list TSRMLS_DC);
 static ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list TSRMLS_DC);
 #endif
 
@@ -122,7 +116,7 @@ typedef char IFX[128];
         {                                   \
             if (ifx_check() < 0) {          \
                 IFXG(sv_sqlcode) = SQLCODE; \
-                php_error(E_WARNING, "%s(): Set connection %s fails (%s)", get_active_function_name(TSRMLS_C), ifx, ifx_error(ifx)); \
+                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Set connection %s fails (%s)", ifx, ifx_error(ifx)); \
                 RETURN_FALSE;               \
             }                               \
         }    
@@ -307,7 +301,7 @@ EXEC SQL END DECLARE SECTION;
                EXEC SQL close database;
                EXEC SQL DISCONNECT CURRENT;
        }
-       efree(link);
+       free(link);
        IFXG(num_persistent)--;
        IFXG(num_links)--;
 }
@@ -318,35 +312,6 @@ static void ifx_free_result(zend_rsrc_list_entry *rsrc TSRMLS_DC)
        efree(Ifx_Result);
 }
 
-static void ifx_free_blob(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
-       IFX_IDRES *Ifx_blob = (IFX_IDRES *)rsrc->ptr;
-
-       
-#if IFX_VERSION < 724 /* this Informix  memory leak is fixed from 7.24 on     */
-                      /* according to the current PERL DBD::Informix          */
-                      /* and otherwise I get segmenation violations with 7.30 */
-
-       if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
-               if(Ifx_blob->BLOB.blob_data.loc_buffer==NULL || Ifx_blob->BLOB.blob_data.loc_size<=0) {;} else {
-                       efree(Ifx_blob->BLOB.blob_data.loc_buffer);  
-               }
-       } else {
-               if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) {
-                       efree(Ifx_blob->BLOB.blob_data.loc_fname); 
-               }
-       }
-
-#elif IFX_VERSION >= 952       /* This memory leak seems to be broken again    */
-                               /* somewhere between 9.21 and 9.52              */
-
-       php_intifx_release_blob(&Ifx_blob->BLOB.blob_data TSRMLS_C);
-
-#endif
-
-       efree(Ifx_blob); 
-}
-
 PHP_INI_BEGIN()
        STD_PHP_INI_BOOLEAN("ifx.allow_persistent", "1",  PHP_INI_SYSTEM, OnUpdateInt,    allow_persistent, zend_ifx_globals, ifx_globals)
        STD_PHP_INI_ENTRY_EX("ifx.max_persistent",  "-1", PHP_INI_SYSTEM, OnUpdateInt,    max_persistent,   zend_ifx_globals, ifx_globals, display_link_numbers)
@@ -377,7 +342,7 @@ PHP_MINIT_FUNCTION(ifx)
        REGISTER_INI_ENTRIES();
 
        le_result   = zend_register_list_destructors_ex(ifx_free_result,NULL, "informix result",    module_number);
-       le_idresult = zend_register_list_destructors_ex(ifx_free_blob, NULL, "informix id result", module_number);
+       le_idresult = zend_register_list_destructors_ex(NULL, NULL, "informix id result", module_number);
        le_link     = zend_register_list_destructors_ex(_close_ifx_link,NULL, "informix link",      module_number);
        le_plink    = zend_register_list_destructors_ex(NULL,_close_ifx_plink,"informix persistent link", module_number);
        ifx_module_entry.type = type;
@@ -446,7 +411,6 @@ static void php_ifx_set_default_link(int id TSRMLS_DC)
 
 static void php_ifx_do_connect(INTERNAL_FUNCTION_PARAMETERS,int persistent)
 {
-       zval **yyhost, **yyuser, **yypasswd;
        char *hashed_details;
        int hashed_details_length;
 
@@ -457,7 +421,7 @@ EXEC SQL END DECLARE SECTION;
 
        if (PG(sql_safe_mode)) {
                if (ZEND_NUM_ARGS()>0) {
-                       php_error(E_NOTICE, "%s(): SQL safe mode in effect - ignoring host/user/password information", get_active_function_name(TSRMLS_C));
+                       php_error_docref(NULL TSRMLS_CC, E_NOTICE, "SQL safe mode in effect - ignoring host/user/password information");
                }
                host = passwd = NULL;
                user = php_get_current_user();
@@ -465,55 +429,30 @@ EXEC SQL END DECLARE SECTION;
                hashed_details = (char *) emalloc(hashed_details_length+1);
                sprintf(hashed_details,"ifx__%s_",user);
        } else {
-               host = IFXG(default_host);
-               user = IFXG(default_user);
-               passwd = IFXG(default_password);
+               int host_len = 0, user_len = 0, passwd_len = 0;
+               host = user = passwd = NULL;
 
-               switch(ZEND_NUM_ARGS()) {
-                       case 0: /* defaults */
-                               break;
-                       case 1: {
-                                               if (zend_get_parameters_ex(1, &yyhost)==FAILURE) {
-                                                       RETURN_FALSE;
-                                               }
-                                               convert_to_string_ex(yyhost);
-                                               host = Z_STRVAL_PP(yyhost);
-                                       }
-                                       break;
-                       case 2: {
-                                               if (zend_get_parameters_ex(2, &yyhost, &yyuser)==FAILURE) {
-                                                       RETURN_FALSE;
-                                               }
-                                               convert_to_string_ex(yyhost);
-                                               convert_to_string_ex(yyuser);
-                                               host = Z_STRVAL_PP(yyhost);
-                                               user = Z_STRVAL_PP(yyuser);
-                                       }
-                                       break;
-                       case 3: {
-                                               if (zend_get_parameters_ex(3, &yyhost, &yyuser, &yypasswd)==FAILURE) {
-                                                       RETURN_FALSE;
-                                               }
-                                               convert_to_string_ex(yyhost);
-                                               convert_to_string_ex(yyuser);
-                                               convert_to_string_ex(yypasswd);
-                                               host   = Z_STRVAL_PP(yyhost);
-                                               user   = Z_STRVAL_PP(yyuser);
-                                               passwd = Z_STRVAL_PP(yypasswd);
-                                       }
-                                       break;
-                       default:
-                               WRONG_PARAM_COUNT;
-                               break;
+               /* set default values if any are avaliable */
+               if (IFXG(default_host)) {
+                       host = IFXG(default_host);
+                       host_len = strlen(host);
+               }
+               if (IFXG(default_user)) {
+                       user = IFXG(default_user);
+                       user_len = strlen(IFXG(default_user));
+               }
+               if (IFXG(default_password)) {
+                       passwd = IFXG(default_password);
+                       passwd_len = strlen(IFXG(default_password));
+               }
+
+               if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sss", &host, &host_len, &user, &user_len, &passwd, &passwd_len) == FAILURE) {
+                       return;
                }
 
-               hashed_details_length = sizeof("ifx___")-1+     strlen(SAFE_STRING(host))+
-                                                                                                       strlen(SAFE_STRING(user))+
-                                                                                                       strlen(SAFE_STRING(passwd));
+               hashed_details_length = sizeof("ifx___") - 1 + host_len + user_len + passwd_len;
                hashed_details = (char *) emalloc(hashed_details_length+1);
-               sprintf(hashed_details,"ifx_%s_%s_%s",  SAFE_STRING(host), 
-                                                                                               SAFE_STRING(user), 
-                                                                                               SAFE_STRING(passwd));
+               sprintf(hashed_details,"ifx_%s_%s_%s", SAFE_STRING(host), SAFE_STRING(user), SAFE_STRING(passwd));
        }
 
        IFXG(sv_sqlcode) = 0;
@@ -529,27 +468,27 @@ EXEC SQL END DECLARE SECTION;
                        list_entry new_le;
 
                        if (IFXG(max_links)!=-1 && IFXG(num_links) >= IFXG(max_links)) {
-                               php_error(E_WARNING, "%s(): Too many open links (%d)", get_active_function_name(TSRMLS_C), IFXG(num_links));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%d)", IFXG(num_links));
                                efree(hashed_details);
                                RETURN_FALSE;
                        }
                        if (IFXG(max_persistent)!=-1 && IFXG(num_persistent) >= IFXG(max_persistent)) {
-                               php_error(E_WARNING, "%s(): Too many open persistent links (%d)", get_active_function_name(TSRMLS_C), IFXG(num_persistent));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open persistent links (%d)", IFXG(num_persistent));
                                efree(hashed_details);
                                RETURN_FALSE;
                        }
 
                        /* create the link */
-                       ifx = (char *) emalloc(sizeof(IFX));
+                       ifx = (char *) malloc(sizeof(IFX));
                        IFXG(connectionid)++;
-                       sprintf(ifx,"%s%x", user, IFXG(connectionid));
+                       sprintf(ifx,"%s%x", SAFE_STRING(user), IFXG(connectionid));
                        
                        EXEC SQL CONNECT TO :host AS :ifx USER :user USING :passwd WITH CONCURRENT TRANSACTION;  
        
                        if (ifx_check() == IFX_ERROR) {
                                IFXG(sv_sqlcode) = SQLCODE;
-                               php_error(E_WARNING, "%s(): %s", get_active_function_name(TSRMLS_C), ifx_error(ifx));
-                               efree(ifx);
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ifx_error(ifx));
+                               free(ifx);
                                efree(hashed_details);
                                RETURN_FALSE;
                        }
@@ -559,7 +498,7 @@ EXEC SQL END DECLARE SECTION;
                        new_le.ptr = ifx;
                        if (zend_hash_update(&EG(persistent_list), hashed_details, hashed_details_length+1, (void *) &new_le, sizeof(list_entry), NULL)==FAILURE) 
                        {
-                               efree(ifx);
+                               free(ifx);
                                efree(hashed_details);
                                RETURN_FALSE;
                        }
@@ -578,7 +517,7 @@ EXEC SQL END DECLARE SECTION;
                                
                                if (ifx_check() == IFX_ERROR) {
                                        IFXG(sv_sqlcode) = SQLCODE;
-                                       php_error(E_WARNING, "%s(): Link to server lost, unable to reconnect (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Link to server lost, unable to reconnect (%s)", ifx_error(ifx));
                                        zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_length+1);
                                        efree(hashed_details);
                                        RETURN_FALSE;
@@ -616,7 +555,7 @@ EXEC SQL END DECLARE SECTION;
 
                                        if (ifx_check() == IFX_ERROR) {
                                                IFXG(sv_sqlcode) = SQLCODE;
-                                               php_error(E_WARNING, "%s(): Unable to connect (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+                                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to connect (%s)", ifx_error(ifx));
                                                zend_hash_del(&EG(regular_list), hashed_details, hashed_details_length+1);
                                                efree(hashed_details);
                                                RETURN_FALSE;
@@ -633,7 +572,7 @@ EXEC SQL END DECLARE SECTION;
                        }
                }
                if (IFXG(max_links) != -1 && IFXG(num_links) >= IFXG(max_links)) {
-                       php_error(E_WARNING, "%s(): Too many open links (%d)", get_active_function_name(TSRMLS_C), IFXG(num_links));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%d)", IFXG(num_links));
                        efree(hashed_details);
                        RETURN_FALSE;
                }
@@ -646,7 +585,7 @@ EXEC SQL END DECLARE SECTION;
 
                if (ifx_check() == IFX_ERROR) {
                        IFXG(sv_sqlcode) = SQLCODE;
-                       php_error(E_WARNING,"%s(): %s", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", ifx_error(ifx));
                        efree(hashed_details);
                        efree(ifx);
                        RETURN_FALSE;
@@ -771,7 +710,6 @@ EXEC SQL BEGIN DECLARE SECTION;
        char cursorid[32];        /* query cursor id   */
        char statemid[32];        /* statement id      */
        char descrpid[32];        /* descriptor id     */
-       char i_descrpid[32];      /* input descriptor binding */
        char *statement;          /* query text        */
        int  fieldcount;          /* field count       */
        int  i;                   /* field index       */
@@ -782,12 +720,12 @@ EXEC SQL BEGIN DECLARE SECTION;
        char *char_tmp;
        long len;
        int indicator;
-       int desc_count;
 $ifdef HAVE_IFX_IUS;
        fixed binary 'blob' ifx_lo_t *slocator;
 $endif;
 EXEC SQL END DECLARE SECTION;
 
+       char *blobfilename;
        int  locind;
        int  ctype;
        int  affected_rows;
@@ -797,7 +735,6 @@ EXEC SQL END DECLARE SECTION;
        int  cursoryproc;
        int  argc=ZEND_NUM_ARGS();
        long ifx_type;
-       int num_params;
 
        if(argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy)==FAILURE) {
                WRONG_PARAM_COUNT;
@@ -815,7 +752,6 @@ EXEC SQL END DECLARE SECTION;
        sprintf(statemid, "statem%x", IFXG(cursorid)); 
        sprintf(cursorid, "cursor%x", IFXG(cursorid)); 
        sprintf(descrpid, "descrp%x", IFXG(cursorid)); 
-       sprintf(i_descrpid, "i_descrp%x", IFXG(cursorid)); 
 
        EXEC SQL set connection :ifx;
        PHP_IFX_CHECK_CONNECTION(ifx);
@@ -823,69 +759,48 @@ EXEC SQL END DECLARE SECTION;
        EXEC SQL PREPARE :statemid FROM :statement;
        if (ifx_check() < 0) {
                IFXG(sv_sqlcode) = SQLCODE;
-               php_error(E_WARNING, "%s(): Prepare fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails (%s)", ifx_error(ifx));
                RETURN_FALSE;
        }
 
        affected_rows = sqlca.sqlerrd[0];       /* save estimated affected rows */
        for (e = 0; e < 6; e++) sqlerrd[e] = sqlca.sqlerrd[e];
    
-       num_params = php_intifx_preparse(statement);
-
-       Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
-       if (Ifx_Result == NULL) { 
-               php_error(E_WARNING, "%s(): Out of memory allocating IFX_RES", get_active_function_name(TSRMLS_C));
-               EXEC SQL free :statemid;
-               RETURN_FALSE;
-       }
-
-       /* initialize result data structure */
-
-       Ifx_Result->rowid = 0;
-       strcpy(Ifx_Result->connecid, ifx); 
-       strcpy(Ifx_Result->cursorid, cursorid);
-       strcpy(Ifx_Result->descrpid, descrpid);
-       strcpy(Ifx_Result->i_descrpid, i_descrpid);
-       strcpy(Ifx_Result->statemid, statemid);
-       Ifx_Result->numcols = 0;
-       Ifx_Result->numicols = 0;
-
-       for (i = 0; i < MAX_RESID; ++i) {
-               Ifx_Result->res_id[i] = -1;
-       }
-
-
-       if (!php_intifx_alloc_ibind(Ifx_Result, num_params))   {
+       EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX 384;
+       if (ifx_check() < 0) {
                IFXG(sv_sqlcode) = SQLCODE;
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s> fails (%s)", descrpid, ifx_error(ifx));
                EXEC SQL free :statemid;
-               efree(Ifx_Result);
-               php_error(E_WARNING, "%s(): Allocate i_desciptor <%s> fails (%s)", get_active_function_name(TSRMLS_C), i_descrpid, ifx_error(ifx));
                RETURN_FALSE;
        }
-       
 
-       desc_count = php_intifx_count_descriptors(statemid);
-       if (desc_count == 0)
-               desc_count = 1;
-
-       EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX :desc_count;
+       EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid;
        if (ifx_check() < 0) {
                IFXG(sv_sqlcode) = SQLCODE;
-               php_error(E_WARNING, "%s(): Allocate desciptor <%s> fails (%s)", get_active_function_name(TSRMLS_C), descrpid, ifx_error(ifx));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Describe fails (%s)", ifx_error(ifx));
+               EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
                EXEC SQL free :statemid;
                RETURN_FALSE;
        }
 
-       EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid;
-       if (ifx_check() < 0) {
-               IFXG(sv_sqlcode) = SQLCODE;
-               php_error(E_WARNING, "%s(): Describe fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+       query_type = sqlca.sqlcode;
+
+       Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
+       if (Ifx_Result == NULL) { 
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory allocating IFX_RES");
                EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
                EXEC SQL free :statemid;
                RETURN_FALSE;
        }
 
-       query_type = sqlca.sqlcode;
+       /* initialize result data structure */
+
+       Ifx_Result->rowid = 0;
+       strcpy(Ifx_Result->connecid, ifx); 
+       strcpy(Ifx_Result->descrpid, descrpid);
+       for (i = 0; i < MAX_RESID; ++i) {
+               Ifx_Result->res_id[i] = -1;
+       }
 
        cursoryproc = 0;
        if (query_type == SQ_EXECPROC) {
@@ -905,9 +820,10 @@ EXEC SQL END DECLARE SECTION;
                */
                zval **pblobidarr, **tmp;
 
-               EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-
                Ifx_Result->iscursory = 0;
+               strcpy(Ifx_Result->cursorid, "");
+               strcpy(Ifx_Result->descrpid, descrpid);
+               strcpy(Ifx_Result->statemid, statemid);
 
                if(argc > 3) {
                        WRONG_PARAM_COUNT;
@@ -919,22 +835,25 @@ EXEC SQL END DECLARE SECTION;
                                EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
                                EXEC SQL free :statemid;
                                efree(Ifx_Result);
-                               php_error(E_WARNING, "%s(): Can't get blob array param", get_active_function_name(TSRMLS_C));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't get blob array param");
                                RETURN_FALSE;
                        }
-
                        if (Z_TYPE_PP(pblobidarr) != IS_ARRAY) {
                                IFXG(sv_sqlcode) = SQLCODE;
                                EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
                                EXEC SQL free :statemid;
                                efree(Ifx_Result);
-                               php_error(E_WARNING, "%s(): Blob-parameter is not an array", get_active_function_name(TSRMLS_C));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Blob-parameter is not an array");
                                RETURN_FALSE;
                        }
 
                        zend_hash_internal_pointer_reset((*pblobidarr)->value.ht);
-                       for (i = 1; i <= num_params && (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS); ++i) {
+                       i=1;
+                       while (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS) {
                                convert_to_long(*tmp);
+                               if ((query_type == SQ_UPDATE) || (query_type == SQ_UPDALL)) {
+                                       EXEC SQL SET DESCRIPTOR :descrpid COUNT = :i;
+                               }
 
                                ifx_type=php_intifx_getType((int)(*tmp)->value.lval,&EG(regular_list) TSRMLS_CC);
                                switch(ifx_type) {
@@ -944,22 +863,21 @@ EXEC SQL END DECLARE SECTION;
                                                if(locator==NULL) {
                                                        IFXG(sv_sqlcode) = SQLCODE;
                                                        EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-                                                       EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
                                                        EXEC SQL free :statemid;
                                                        efree(Ifx_Result);
-                                                       php_error(E_WARNING,"%s(): %d is not an Informix blob-result index", get_active_function_name(TSRMLS_C), (int)((*tmp)->value.lval));
+                                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not an Informix blob-result index", (int)((*tmp)->value.lval));
                                                        RETURN_FALSE;
                                                }
                                                if(locator->loc_loctype==LOCFNAME) {
                                                        locator->loc_oflags=LOC_RONLY;
                                                }
-                                               EXEC SQL SET DESCRIPTOR :i_descrpid VALUE :i DATA = :*locator, TYPE = :loc_t_type; 
+                                               EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE= :loc_t_type;
                                                break;
 
                                        case TYPE_CHAR:
                                                len=php_intifx_get_char((int)((*tmp)->value.lval),&EG(regular_list),&char_tmp TSRMLS_CC);
                                                indicator=0;
-                                               if(char_tmp==NULL || len < 0) {
+                                               if(char_tmp==NULL || len<0) {
                                                        indicator=-1;
                                                }
                                                len++;
@@ -971,33 +889,11 @@ EXEC SQL END DECLARE SECTION;
                                                        TYPE= :sqlchar_type;
                                                break;
                                }
-
-                               if (ifx_check() < 0)   {
-                                       IFXG(sv_sqlcode) = SQLCODE;
-                                       EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-                                       EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
-                                       EXEC SQL free :statemid;
-                                       efree(Ifx_Result);
-                                       php_error(E_WARNING, "%s(): Execute immediate fails : %s (%s)", get_active_function_name(TSRMLS_C), statement, ifx_error(ifx));
-                                       RETURN_FALSE;
-                               }
-
+                               i++;
                                zend_hash_move_forward((*pblobidarr)->value.ht);
                        }
                        Ifx_Result->paramquery=1;  
-
-                       if (--i != num_params)   {
-                               EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-                               EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
-                               EXEC SQL free :statemid;
-                               efree(Ifx_Result);
-                               php_error(E_WARNING, "%s(): Execute immediate fails : number of created blobs doesn't match placeholders (?)", get_active_function_name(TSRMLS_C), statement);
-                               RETURN_FALSE;
-                       }
-       
-
-                       EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :i_descrpid;
-
+                       EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid;
                } else {
                        EXEC SQL EXECUTE :statemid;
                }
@@ -1005,12 +901,9 @@ EXEC SQL END DECLARE SECTION;
                if (ifx_check() < 0) {
                        IFXG(sv_sqlcode) = SQLCODE;
                        EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-                       if (Ifx_Result->numicols > 0)   {
-                               EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
-                       }
                        EXEC SQL free :statemid;
                        efree(Ifx_Result);
-                       php_error(E_WARNING, "%s(): Execute immediate fails : %s (%s)", get_active_function_name(TSRMLS_C), statement, ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails : %s (%s)", statement, ifx_error(ifx));
                        RETURN_FALSE;
                }
                Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
@@ -1047,7 +940,7 @@ EXEC SQL END DECLARE SECTION;
                        EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
                        EXEC SQL free :statemid;
                        efree(Ifx_Result);
-                       php_error(E_WARNING, "%s(): Can not get descriptor %s (%s)", get_active_function_name(TSRMLS_C), descrpid, ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not get descriptor %s (%s)", descrpid, ifx_error(ifx));
                        RETURN_FALSE;
                }
 
@@ -1061,10 +954,6 @@ EXEC SQL END DECLARE SECTION;
                        Ifx_Result->ishold = 1;
                }
 
-               /*
-                * ifx_do part
-                */
-
                if (Ifx_Result->isscroll) {
                        if (Ifx_Result->ishold) {
                                EXEC SQL DECLARE :cursorid SCROLL CURSOR WITH HOLD FOR :statemid;
@@ -1084,7 +973,7 @@ EXEC SQL END DECLARE SECTION;
                        EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
                        EXEC SQL free :statemid;
                        efree(Ifx_Result);
-                       php_error(E_WARNING, "%s(): Declare cursor fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Declare cursor fails (%s)", ifx_error(ifx));
                        RETURN_FALSE;
                }
 
@@ -1095,9 +984,12 @@ EXEC SQL END DECLARE SECTION;
                        EXEC SQL free :statemid;
                        EXEC SQL free :cursorid;
                        efree(Ifx_Result);
-                       php_error(E_WARNING, "%s(): Open cursor fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Open cursor fails (%s)", ifx_error(ifx));
                        RETURN_FALSE;
                }
+               strcpy(Ifx_Result->cursorid, cursorid);
+               strcpy(Ifx_Result->descrpid, descrpid);
+               strcpy(Ifx_Result->statemid, statemid);
 
                /* check for text/blob columns */
                locind = 0;
@@ -1110,31 +1002,25 @@ $endif;
                        ) {
                                int bid = 0;
                                if(fieldtype==SQLTEXT) {
-                                       if(IFXG(blobinfile)==0) {
-                                               bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC);
-                                               locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
-                                       } else { 
-                                               bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INFILE, "",-1,&EG(regular_list) TSRMLS_CC);
-                                               locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
-                                       }
+                                       bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC);
+                                       locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
                                        EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
                                }
-                               else if(fieldtype==SQLBYTES) {
+                               if(fieldtype==SQLBYTES) {
                                        if(IFXG(blobinfile)==0) {
                                                bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC);
                                                locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
                                        } else {
-                                               bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE, "",-1,&EG(regular_list) TSRMLS_CC);
+                                               blobfilename=php_intifx_create_tmpfile(i TSRMLS_CC);
+                                               bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE, blobfilename,strlen(blobfilename),&EG(regular_list) TSRMLS_CC);
                                                locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
+                                               locator->loc_oflags=LOC_WONLY;
                                        }
                                        EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
                                } 
-
-                               php_intifx_release_blob(locator TSRMLS_C);
-
 $ifdef HAVE_IFX_IUS;
                                if(fieldtype==SQLUDTFIXED) {
-                                       bid=php_intifxus_new_slob(&EG(regular_list));
+                                       bid = php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC);
                                        slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC);
                                        EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;  
                                }
@@ -1180,7 +1066,6 @@ EXEC SQL BEGIN DECLARE SECTION;
        char cursorid[32];        /* query cursor id   */
        char statemid[32];        /* statement id      */
        char descrpid[32];        /* descriptor id     */
-       char i_descrpid[32];      /* input descriptor binding */
        char *statement;          /* query text        */
        int  fieldcount;          /* field count       */
        int  i;                   /* field index       */
@@ -1192,7 +1077,6 @@ EXEC SQL BEGIN DECLARE SECTION;
        int  indicator;    
        long sqlerrd[6];
        int e;
-       int desc_count;
 EXEC SQL END DECLARE SECTION;
 
        int  ctype;
@@ -1201,7 +1085,6 @@ EXEC SQL END DECLARE SECTION;
        int  cursoryproc;
        int  argc=ZEND_NUM_ARGS();
        long ifx_type;
-       int num_params;
 
        if(argc < 2 || zend_get_parameters_ex(argc, &query, &ifx_link, &dummy, &dummy)==FAILURE) {
                WRONG_PARAM_COUNT;
@@ -1219,7 +1102,6 @@ EXEC SQL END DECLARE SECTION;
        sprintf(statemid, "statem%x", IFXG(cursorid)); 
        sprintf(cursorid, "cursor%x", IFXG(cursorid)); 
        sprintf(descrpid, "descrp%x", IFXG(cursorid)); 
-       sprintf(i_descrpid, "i_descrp%x", IFXG(cursorid)); 
 
        EXEC SQL set connection :ifx;
        PHP_IFX_CHECK_CONNECTION(ifx);
@@ -1227,69 +1109,49 @@ EXEC SQL END DECLARE SECTION;
        EXEC SQL PREPARE :statemid FROM :statement;
        if (ifx_check() < 0) {
                IFXG(sv_sqlcode) = SQLCODE;
-               php_error(E_WARNING, "%s(): Prepare fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Prepare fails (%s)", ifx_error(ifx));
                RETURN_FALSE;
        }
 
        affected_rows = sqlca.sqlerrd[0];       /* save estimated affected rows */
        for (e = 0; e < 6; e++) sqlerrd[e] = sqlca.sqlerrd[e];
 
-       num_params = php_intifx_preparse(statement);
-
-       Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
-       if (Ifx_Result == NULL) { 
-               php_error(E_WARNING, "%s(): Out of memory allocating IFX_RES", get_active_function_name(TSRMLS_C));
-               EXEC SQL free :statemid;
-               RETURN_FALSE;
-       }
-
-       /* initialize result data structure */
-
-       Ifx_Result->rowid = 0;
-       strcpy(Ifx_Result->connecid, ifx); 
-       strcpy(Ifx_Result->cursorid, cursorid);
-       strcpy(Ifx_Result->descrpid, descrpid);
-       strcpy(Ifx_Result->i_descrpid, i_descrpid);
-       strcpy(Ifx_Result->statemid, statemid);
-       Ifx_Result->numcols = 0;
-       Ifx_Result->numicols = 0;
-
-       for (i = 0; i < MAX_RESID; ++i) {
-               Ifx_Result->res_id[i] = -1;
-       }
-
-
-       if (!php_intifx_alloc_ibind(Ifx_Result, num_params))   {
+       EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX 384;
+       if (ifx_check() < 0) {
                IFXG(sv_sqlcode) = SQLCODE;
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Allocate desciptor <%s> fails (%s)", descrpid, ifx_error(ifx));
                EXEC SQL free :statemid;
-               efree(Ifx_Result);
-               php_error(E_WARNING, "%s(): Allocate i_desciptor <%s> fails (%s)", get_active_function_name(TSRMLS_C), i_descrpid, ifx_error(ifx));
                RETURN_FALSE;
        }
        
-
-       desc_count = php_intifx_count_descriptors(statemid);
-       if (desc_count == 0)
-               desc_count = 1;
-
-       EXEC SQL ALLOCATE DESCRIPTOR :descrpid WITH MAX :desc_count;
+       EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid;
        if (ifx_check() < 0) {
                IFXG(sv_sqlcode) = SQLCODE;
-               php_error(E_WARNING, "%s(): Allocate desciptor <%s> fails (%s)", get_active_function_name(TSRMLS_C), descrpid, ifx_error(ifx));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Describe fails (%s)", ifx_error(ifx));
+               EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
                EXEC SQL free :statemid;
                RETURN_FALSE;
        }
-       
-       EXEC SQL DESCRIBE :statemid USING SQL DESCRIPTOR :descrpid;
-       if (ifx_check() < 0) {
+
+       query_type = sqlca.sqlcode;
+
+       Ifx_Result = (IFX_RES *) emalloc(sizeof(IFX_RES));
+       if (Ifx_Result == NULL) { 
                IFXG(sv_sqlcode) = SQLCODE;
-               php_error(E_WARNING, "%s(): Describe fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory allocating IFX_RES");
                EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
                EXEC SQL free :statemid;
                RETURN_FALSE;
        }
 
-       query_type = sqlca.sqlcode;
+       /* initialize result data structure */
+       Ifx_Result->rowid = 0;
+       strcpy(Ifx_Result->connecid, ifx); 
+       strcpy(Ifx_Result->descrpid, descrpid);
+       strcpy(Ifx_Result->statemid, statemid);
+       for (i = 0; i < MAX_RESID; ++i) {
+               Ifx_Result->res_id[i] = -1;
+       }
 
        cursoryproc = 0;
        if (query_type == SQ_EXECPROC) {
@@ -1309,9 +1171,10 @@ EXEC SQL END DECLARE SECTION;
                */
                zval **pblobidarr, **tmp;
 
-               EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-
                Ifx_Result->iscursory = 0;
+               strcpy(Ifx_Result->cursorid, cursorid);
+               strcpy(Ifx_Result->cursorid, "");
+               strcpy(Ifx_Result->descrpid, descrpid);
 
                if(argc > 3) {
                        WRONG_PARAM_COUNT;
@@ -1319,28 +1182,32 @@ EXEC SQL END DECLARE SECTION;
 
                if(argc == 3) {
                        Ifx_Result->paramquery=1;
-                       if (zend_get_parameters_ex(3, &dummy, &dummy, &pblobidarr) == FAILURE) {
+                       if (zend_get_parameters_ex(3, &dummy, &dummy,&pblobidarr) == FAILURE) {
                                IFXG(sv_sqlcode) = SQLCODE;
                                EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
                                EXEC SQL free :statemid;
                                efree(Ifx_Result);
-                               php_error(E_WARNING, "%s(): Can't get blob array param", get_active_function_name(TSRMLS_C));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't get blob array param");
                                RETURN_FALSE;
                        }
 
-                       if (Z_TYPE_PP(pblobidarr) != IS_ARRAY) {
+                       if((*pblobidarr)->type != IS_ARRAY) {
                                IFXG(sv_sqlcode) = SQLCODE;
                                EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
                                EXEC SQL free :statemid;
                                efree(Ifx_Result);
-                               php_error(E_WARNING, "%s(): Blob-parameter not an array", get_active_function_name(TSRMLS_C));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Blob-parameter not an array");
                                RETURN_FALSE;
                        } 
 
                        zend_hash_internal_pointer_reset((*pblobidarr)->value.ht);
-                       for (i = 1; i <= num_params && (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS); ++i) {
+                       i=1;
+                       while (zend_hash_get_current_data((*pblobidarr)->value.ht, (void **) &tmp) == SUCCESS) {
                                convert_to_long(*tmp);
-
+                               if ((query_type == SQ_UPDATE) || (query_type == SQ_UPDALL)) {
+                                       EXEC SQL SET DESCRIPTOR :descrpid COUNT = :i;
+                               }
+                               
                                ifx_type=php_intifx_getType((int)(*tmp)->value.lval,&EG(regular_list) TSRMLS_CC);
                                switch(ifx_type) {
                                        case TYPE_BLTEXT:
@@ -1349,20 +1216,19 @@ EXEC SQL END DECLARE SECTION;
                                                if(locator==NULL) {
                                                        IFXG(sv_sqlcode) = SQLCODE;
                                                        EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-                                                       EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
                                                        EXEC SQL free :statemid;
                                                        efree(Ifx_Result);
-                                                       php_error(E_WARNING, "%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), (int)((*tmp)->value.lval));
+                                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", (int)((*tmp)->value.lval));
                                                        RETURN_FALSE;
                                                }
                                                if(locator->loc_loctype==LOCFNAME) {
                                                        locator->loc_oflags=LOC_RONLY;
                                                }
-                                               EXEC SQL SET DESCRIPTOR :i_descrpid VALUE :i DATA = :*locator, TYPE = :loc_t_type; 
+                                               EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator, TYPE=:loc_t_type; 
                                                break;
-
                                        case TYPE_CHAR:
                                                len=php_intifx_get_char((int)((*tmp)->value.lval),&EG(regular_list),&char_tmp TSRMLS_CC);
+                                               
                                                indicator=0;
                                                if(char_tmp==NULL || len < 0) {
                                                        indicator=-1;
@@ -1376,30 +1242,9 @@ EXEC SQL END DECLARE SECTION;
                                                        TYPE= :sqlchar_type;
                                                break;
                                }
-
-                               if (ifx_check() < 0)   {
-                                       IFXG(sv_sqlcode) = SQLCODE;
-                                       EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-                                       EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
-                                       EXEC SQL free :statemid;
-                                       efree(Ifx_Result);
-                                       php_error(E_WARNING, "%s(): Execute immediate fails : %s (%s)", get_active_function_name(TSRMLS_C), statement, ifx_error(ifx));
-                                       RETURN_FALSE;
-                               }
-
+                               i++;
                                zend_hash_move_forward((*pblobidarr)->value.ht);
-
                        } 
-
-                       if (--i != num_params)   {
-                               EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
-                               EXEC SQL DEALLOCATE DESCRIPTOR :i_descrpid;
-                               EXEC SQL free :statemid;
-                               efree(Ifx_Result);
-                               php_error(E_WARNING, "%s(): Execute immediate fails : number of created blobs doesn't match placeholders (?)", get_active_function_name(TSRMLS_C), statement);
-                               RETURN_FALSE;
-                       }
-       
                }
 
                Ifx_Result->affected_rows = affected_rows;   /* saved estimated from prepare */
@@ -1410,7 +1255,6 @@ EXEC SQL END DECLARE SECTION;
                   ## SELECT-STATEMENT 
                   ##
                */
-
                ctype = 0;   /* preset */
 
                switch(argc) {
@@ -1428,6 +1272,7 @@ EXEC SQL END DECLARE SECTION;
                                break;
                }
                
+               strcpy(Ifx_Result->cursorid, cursorid);
                Ifx_Result->iscursory = 1;
 
                Ifx_Result->affected_rows = affected_rows;   /* saved estimated from prepare */
@@ -1439,10 +1284,9 @@ EXEC SQL END DECLARE SECTION;
                        EXEC SQL DEALLOCATE DESCRIPTOR :descrpid;
                        EXEC SQL free :statemid;
                        efree(Ifx_Result);
-                       php_error(E_WARNING, "%s(): Can not get descriptor %s (%s)", get_active_function_name(TSRMLS_C), descrpid, ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not get descriptor %s (%s)", descrpid, ifx_error(ifx));
                        RETURN_FALSE;
                }
-
                Ifx_Result->numcols = fieldcount;
                Ifx_Result->isscroll = Ifx_Result->ishold = 0;
 
@@ -1482,7 +1326,6 @@ EXEC SQL BEGIN DECLARE SECTION;
        char *cursorid;           /* query cursor id   */
        char *statemid;           /* statement id      */
        char *descrpid;           /* descriptor id     */
-       char *i_descrpid;           /* descriptor id     */
        int  fieldcount;          /* field count       */
        int  i;                   /* field index       */
        short fieldtype;
@@ -1494,6 +1337,7 @@ $endif;
 EXEC SQL END DECLARE SECTION;
 
        int  locind;
+       char *blobfilename;
 
        if(ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &result)==FAILURE)) {
                WRONG_PARAM_COUNT;
@@ -1507,26 +1351,25 @@ EXEC SQL END DECLARE SECTION;
        cursorid   = Ifx_Result->cursorid;
        statemid   = Ifx_Result->statemid;
        descrpid   = Ifx_Result->descrpid;
-       i_descrpid   = Ifx_Result->i_descrpid;
        fieldcount = Ifx_Result->numcols;
 
        EXEC SQL set connection :ifx;
        PHP_IFX_CHECK_CONNECTION(ifx);
        
        if (Ifx_Result->iscursory < 0) {
-               php_error(E_WARNING, "%s(): Resultindex %d is not a prepared query", get_active_function_name(TSRMLS_C), Z_LVAL_PP(result));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Resultindex %d is not a prepared query", Z_LVAL_PP(result));
                RETURN_FALSE;
        }
 
        if (Ifx_Result->iscursory==0) {         /* execute immediate */
                if(Ifx_Result->paramquery!=0) {
-                       EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :i_descrpid;
+                       EXEC SQL EXECUTE :statemid USING SQL DESCRIPTOR :descrpid;
                } else {
                        EXEC SQL EXECUTE :statemid;
                }
                if (ifx_check() < 0) {
                        IFXG(sv_sqlcode) = SQLCODE;
-                       php_error(E_WARNING, "%s(): Execute immediate fails: %s", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Execute immediate fails: %s", ifx_error(ifx));
                        RETURN_FALSE;
                }
                Ifx_Result->affected_rows = sqlca.sqlerrd[2]; /* really affected */
@@ -1548,14 +1391,14 @@ EXEC SQL END DECLARE SECTION;
 
                if (ifx_check() < 0) {
                        IFXG(sv_sqlcode) = SQLCODE;
-                       php_error(E_WARNING, "%s(): Declare cursor fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Declare cursor fails (%s)", ifx_error(ifx));
                        RETURN_FALSE;
                }
 
                EXEC SQL OPEN :cursorid;
                if (ifx_check() < 0) {
                        IFXG(sv_sqlcode) = SQLCODE;
-                       php_error(E_WARNING, "%s(): Open cursor fails (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Open cursor fails (%s)", ifx_error(ifx));
                        RETURN_FALSE;
                }
 
@@ -1571,28 +1414,25 @@ $endif;
 
                                int bid = 0;
                                if(fieldtype==SQLTEXT) {
-                                       if(IFXG(blobinfile)==0) {
-                                               bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC);
-                                               locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
-                                       } else {
-                                               bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INFILE,"", -1,&EG(regular_list) TSRMLS_CC);
-                                               locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
-                                       }
+                                       bid=php_intifx_create_blob(TYPE_BLTEXT,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC);
+                                       locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
                                        EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
                                }
-                               else if(fieldtype==SQLBYTES) {
+                               if(fieldtype==SQLBYTES) {
                                        if(IFXG(blobinfile)==0) {
                                                bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INMEM,"",-1,&EG(regular_list) TSRMLS_CC);
                                                locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
                                        } else {
-                                               bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE,"", -1,&EG(regular_list) TSRMLS_CC);
+                                               blobfilename=php_intifx_create_tmpfile(i TSRMLS_CC);
+                                               bid=php_intifx_create_blob(TYPE_BLBYTE,BLMODE_INFILE,blobfilename,strlen(blobfilename),&EG(regular_list) TSRMLS_CC);
                                                locator=php_intifx_get_blobloc(bid,&EG(regular_list) TSRMLS_CC);
+                                               locator->loc_oflags=LOC_WONLY;
                                        }
                                        EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator;
                                }
 $ifdef HAVE_IFX_IUS;
                                if(fieldtype==SQLUDTFIXED) {
-                                       bid=php_intifxus_new_slob(&EG(regular_list));
+                                       bid=php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC);
                                        slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC);
                                        EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;  
                                } 
@@ -1686,7 +1526,7 @@ PHP_FUNCTION(ifx_errormsg)
                rgetlmsg(ifx_errorcode, ifx_errmsg, maxmsglen, &msglen);
                if (msglen > maxmsglen) {
                        maxmsglen = msglen + 1;
-                       efree(ifx_errmsg);
+                       free(ifx_errmsg);
                        ifx_errmsg = (char *)malloc(maxmsglen + 1);
                        rgetlmsg(ifx_errorcode, ifx_errmsg, maxmsglen, &msglen);
                }
@@ -1696,7 +1536,7 @@ PHP_FUNCTION(ifx_errormsg)
        
        returnmsg = (char *) emalloc(strlen(ifx_errmsg) + 128);
        sprintf(returnmsg,ifx_errmsg, sqlca.sqlerrm);
-       efree(ifx_errmsg);
+       free(ifx_errmsg);
        RETURN_STRING(returnmsg,0); 
 }
 /* }}} */
@@ -1785,6 +1625,7 @@ EXEC SQL END DECLARE SECTION;
        char string_data[256];
        long long_data;
        char *p;
+       char *blobfilename;
        char *fetch_pos;
        char *nullstr;
 
@@ -1819,7 +1660,7 @@ EXEC SQL END DECLARE SECTION;
        IFXG(sv_sqlcode) = 0;
 
        if (strcmp(Ifx_Result->cursorid,"") == 0) {
-               php_error(E_WARNING, "%s(): Not a select cursor!", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
                RETURN_FALSE;
        }
        
@@ -1832,27 +1673,6 @@ EXEC SQL END DECLARE SECTION;
        EXEC SQL set connection :ifx;
        PHP_IFX_CHECK_CONNECTION(ifx);
 
-       locind = 0;
-       for (i = 1; i <= Ifx_Result->numcols; i++)   {
-
-               EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldtype = TYPE;
-               if (fieldtype == SQLBYTES || fieldtype == SQLTEXT)   {
-                       bid_b = Ifx_Result->res_id[locind];
-                       if ((locator_b = php_intifx_get_blobloc(bid_b, &EG(regular_list) TSRMLS_C)) == NULL)   {
-                               php_error(E_WARNING, "%s(): Cant get BLOB from Result Set!", get_active_function_name(TSRMLS_C));
-                               RETURN_FALSE;
-                       }
-                       locind++;
-
-                       if(IFXG(blobinfile)==0)   {
-                               php_intifx_init_blob(locator_b, BLMODE_INMEM, 1);
-                       } else {
-                               php_intifx_init_blob(locator_b, BLMODE_INFILE, 1);
-                       }
-                       EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator_b;
-               }
-       }
-
        if (!Ifx_Result->isscroll) {
                EXEC SQL FETCH :cursorid USING SQL DESCRIPTOR :descrpid;
        } else {
@@ -1874,7 +1694,7 @@ EXEC SQL END DECLARE SECTION;
                        } else if (!strcasecmp(fetch_pos,"CURRENT")) {
                                EXEC SQL FETCH CURRENT  :cursorid USING SQL DESCRIPTOR :descrpid;
                        } else {
-                               php_error(E_WARNING, "%s(): Invalid positioning arg on fetch", get_active_function_name(TSRMLS_C));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid positioning arg on fetch");
                        }
                }
        }  
@@ -1883,7 +1703,7 @@ EXEC SQL END DECLARE SECTION;
                switch (ifx_check()) {
                        case IFX_ERROR:
                                IFXG(sv_sqlcode) = SQLCODE;
-                               php_error(E_WARNING, "%s(): Can not fetch row on cursor %s (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx), cursorid);
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not fetch row on cursor %s (%s)", ifx_error(ifx), cursorid);
                                RETURN_FALSE;
                                break;
                        case IFX_NODATA:
@@ -1895,9 +1715,7 @@ EXEC SQL END DECLARE SECTION;
        }
        Ifx_Result->rowid++;
 
-       if (array_init(return_value)==FAILURE) {
-               RETURN_FALSE;
-       }
+       array_init(return_value);
        num_fields = fieldcount;
 
        locind = 0;
@@ -1910,7 +1728,7 @@ EXEC SQL END DECLARE SECTION;
 
                if (ifx_check() < 0) {
                        IFXG(sv_sqlcode) = SQLCODE;
-                       php_error(E_WARNING, "%s(): Get descriptor (field # %d) fails (%s)", get_active_function_name(TSRMLS_C), i, ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx));
                        RETURN_FALSE;
                }
 
@@ -1925,12 +1743,10 @@ EXEC SQL END DECLARE SECTION;
                        if(     (IFXG(textasvarchar)==0 && fieldtype==SQLTEXT) || 
                                (IFXG(byteasvarchar)==0 && fieldtype==SQLBYTES)) {
                                bid_b=Ifx_Result->res_id[locind];
-                               locator_b=php_intifx_get_blobloc(bid_b,&EG(regular_list) TSRMLS_CC); 
                                bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
                                php_intifx_update_blob(bid,nullstr,strlen(nullstr),&EG(regular_list) TSRMLS_CC);
                                add_assoc_long(return_value,fieldname,bid);
                                ++locind;
-                               php_intifx_release_blob(locator_b TSRMLS_C);
                                continue; 
                        }
                        if ((fieldtype==SQLTEXT) || (fieldtype==SQLBYTES)
@@ -1938,10 +1754,7 @@ $ifdef HAVE_IFX_IUS;
                        || (fieldtype==SQLUDTFIXED)
 $endif;
                        ) {
-                               bid_b=Ifx_Result->res_id[locind];
-                               locator_b=php_intifx_get_blobloc(bid_b,&EG(regular_list) TSRMLS_CC); 
                                ++locind;
-                               php_intifx_release_blob(locator_b TSRMLS_C);
                        }
                        add_assoc_string(return_value, fieldname, nullstr, DUP);
                        continue;
@@ -2013,7 +1826,7 @@ $ifdef HAVE_IFX_IUS;
                                fieldleng=ifx_var_getlen(&lvar_tmp);
                                if (fieldleng > 2) fieldleng -= 2; /* fix by Alex Shepherd */
                                if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
-                                       php_error(E_WARNING, "%s(): Out of memory", get_active_function_name(TSRMLS_C));
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
                                        RETURN_FALSE;
                                }
                                memcpy(char_data,ifx_var_getdata(&lvar_tmp),fieldleng);
@@ -2027,7 +1840,7 @@ $endif;
                        case SQLCHAR     :
                        case SQLNCHAR    :
                                if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
-                                       php_error(E_WARNING, "%s(): Out of memory", get_active_function_name(TSRMLS_C));
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
                                        RETURN_FALSE;
                                }
                                EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :char_data = DATA;
@@ -2042,7 +1855,7 @@ $ifdef HAVE_IFX_IUS;
                        case SQLUDTFIXED :
                                bid_b=Ifx_Result->res_id[locind];
                                add_assoc_long(return_value,fieldname,bid_b);
-                               bid=php_intifxus_new_slob(&EG(regular_list));
+                               bid=php_intifxus_new_slob(&EG(regular_list) TSRMLS_CC);
                                slocator=php_intifxus_get_slobloc(bid,&EG(regular_list) TSRMLS_CC);
                                EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocator;  
                                Ifx_Result->res_id[locind]=bid;
@@ -2054,14 +1867,6 @@ $endif;
                                bid_b=Ifx_Result->res_id[locind];
                                locator_b=php_intifx_get_blobloc(bid_b,&EG(regular_list) TSRMLS_CC); 
                                ++locind;
-
-                               if(IFXG(blobinfile)==0)   {
-                                       php_intifx_init_blob(locator_b, BLMODE_INMEM, 0);
-                               }
-                               else   {
-                                       php_intifx_init_blob(locator_b, BLMODE_INFILE, 0);
-                               }
-
                                EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :*locator_b = DATA;
                                
                                /* work around for ESQL/C bug with NULL values and BLOBS */
@@ -2073,10 +1878,10 @@ $endif;
                                if (locator_b->loc_indicator == -1) { 
                                        if((IFXG(textasvarchar)==0 && fieldtype==SQLTEXT) 
                                        || (IFXG(byteasvarchar)==0 && fieldtype==SQLBYTES)) {
+                                               bid_b=Ifx_Result->res_id[locind];
                                                bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
                                                php_intifx_update_blob(bid,nullstr,strlen(nullstr),&EG(regular_list) TSRMLS_CC);
                                                add_assoc_long(return_value,fieldname,bid);
-                                               php_intifx_release_blob(locator_b TSRMLS_C);
                                                break; 
                                        }
                                        if ((fieldtype==SQLTEXT) || (fieldtype==SQLBYTES)
@@ -2085,16 +1890,26 @@ $ifdef HAVE_IFX_IUS;
 $endif;
                                        ) {
                                                add_assoc_string(return_value, fieldname, nullstr, DUP);
-                                               php_intifx_release_blob(locator_b TSRMLS_C);
                                                break;
                                        }
                                }
                
                                if (locator_b->loc_status < 0) {  /* blob too large */   
-                                       php_error(E_WARNING, "%s(): No memory (%d bytes) for blob", get_active_function_name(TSRMLS_C), locator_b->loc_bufsize);
+                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "No memory (%d bytes) for blob", locator_b->loc_bufsize);
                                        RETURN_FALSE;
                                }
                
+                               /* copy blob */
+                               bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
+
+                               /* and generate new tempfile for next row */
+                               if(locator_b->loc_loctype==LOCFNAME) {
+                                       blobfilename=php_intifx_create_tmpfile(bid_b TSRMLS_CC);
+                                       php_intifx_update_blob(bid_b,blobfilename,strlen(blobfilename),&EG(regular_list) TSRMLS_CC);
+                                       efree(blobfilename);
+                                       EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA= :*locator_b;
+                               } 
                                /* return blob as VARCHAR ?  */
                                /* note that in case of "blobinfile" */
                                /* you get the file name */
@@ -2107,32 +1922,18 @@ $endif;
                                        char *content;
                                        long lg;
                        
-                                       lg=php_intifx_get_blob(bid_b, &EG(regular_list), &content TSRMLS_CC);
+                                       lg=php_intifx_get_blob(bid, &EG(regular_list), &content TSRMLS_CC);
                                        if(content == NULL || lg < 0) {
                                                add_assoc_string(return_value,fieldname,nullstr,DUP);
                                        } else {
                                                add_assoc_stringl(return_value,fieldname,content,lg,DUP);
                                        }
-
-                                       if (locator_b->loc_loctype == LOCMEMORY)   {
-                                               locator_b->loc_buffer = NULL;
-                                       }
-                                       php_intifx_release_blob(locator_b TSRMLS_C);
+                                       php_intifx_free_blob(bid, &EG(regular_list) TSRMLS_CC);
                                        break;
                                } 
 
-                                /* copy blob */
-                                bid=php_intifx_copy_blob(bid_b, &EG(regular_list) TSRMLS_CC);
-
                                /* no, return as blob id */
                                add_assoc_long(return_value,fieldname,bid);
-
-                               if (locator_b->loc_loctype == LOCMEMORY)   {
-                                       locator_b->loc_buffer = NULL;
-                               }
-
-                               php_intifx_release_blob(locator_b TSRMLS_C);
-
                                break;
                        default  :
                                sprintf(string_data,"ESQL/C : %s : unsupported field type[%d]", fieldname, fieldleng);
@@ -2223,7 +2024,7 @@ EXEC SQL END DECLARE SECTION;
        ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
 
        if (strcmp(Ifx_Result->cursorid,"") == 0) {
-               php_error(E_WARNING, "%s(): Not a select cursor!", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
                RETURN_FALSE;
        }
 
@@ -2241,7 +2042,7 @@ EXEC SQL END DECLARE SECTION;
        switch (ifx_check()) {
                case IFX_ERROR:
                        IFXG(sv_sqlcode) = SQLCODE;
-                       php_error(E_WARNING, "%s(): Can not fetch next row on cursor %s (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx), cursorid);
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not fetch next row on cursor %s (%s)", ifx_error(ifx), cursorid);
                        RETURN_FALSE;
                        break;
                case IFX_NODATA:
@@ -2271,7 +2072,7 @@ EXEC SQL END DECLARE SECTION;
                EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME;
                if (ifx_check() < 0) {
                        IFXG(sv_sqlcode) = SQLCODE;
-                       php_error(E_WARNING, "%s(): Get descriptor (field # %d) fails (%s)", get_active_function_name(TSRMLS_C), i, ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx));
                        RETURN_FALSE;
                }
 
@@ -2298,7 +2099,7 @@ EXEC SQL END DECLARE SECTION;
 
                        if (ifx_check() < 0) {
                                IFXG(sv_sqlcode) = SQLCODE;
-                               php_error(E_WARNING, "%s(): Get descriptor (field # %d) fails (%s)", get_active_function_name(TSRMLS_C), i, ifx_error(ifx));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx));
                                RETURN_FALSE;
                        }
                
@@ -2377,7 +2178,7 @@ $ifdef HAVE_IFX_IUS;
                                        if (fieldleng > 2) fieldleng -= 2; /* fix by Alex Shepherd */
 
                                        if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
-                                               php_error(E_WARNING, "%s(): Out of memory", get_active_function_name(TSRMLS_C));
+                                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
                                                RETURN_FALSE;
                                        }
                                        memcpy(char_data,ifx_var_getdata(&lvar_tmp),fieldleng);
@@ -2391,7 +2192,7 @@ $endif;
                                case SQLNCHAR   :
                                case SQLNVCHAR  :
                                        if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {
-                                               php_error(E_WARNING, "%s(): Out of memory", get_active_function_name(TSRMLS_C));
+                                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");
                                                RETURN_FALSE;
                                        }
                                        EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :char_data = DATA;
@@ -2427,7 +2228,7 @@ $endif;
                                                }
                                        }
                                        if (locator_b->loc_status < 0) {  /* blob too large */   
-                                               php_error(E_WARNING, "%s(): Not enough memory (%d bytes) for blob", get_active_function_name(TSRMLS_C), locator_b->loc_bufsize);
+                                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not enough memory (%d bytes) for blob", locator_b->loc_bufsize);
                                                RETURN_FALSE;
                                        }
 
@@ -2438,15 +2239,15 @@ $endif;
                                                php_printf("<td>%s</td>", nullstr);
                                        } else {
                                                /* need an extra byte for string terminator */
-                                               copy_content = emalloc(lg + 1);
+                                               copy_content = malloc(lg + 1);
                                                if (copy_content == NULL) {
-                                                       php_error(E_WARNING, "%s(): Not enough memory for TEXT column", get_active_function_name(TSRMLS_C));
+                                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not enough memory for TEXT column");
                                                        RETURN_FALSE;
                                                }
                                                memcpy(copy_content, content, lg);
                                                copy_content[lg]=0;
                                                php_printf("<td>%s</td>", copy_content);
-                                               efree(copy_content);
+                                               free(copy_content);
                                        }
                                        break;
 
@@ -2467,7 +2268,7 @@ $endif;
                switch (ifx_check()) {
                        case IFX_ERROR:
                                IFXG(sv_sqlcode) = SQLCODE;
-                               php_error(E_WARNING, "%s(): Can not fetch next row on cursor %s (%s)", get_active_function_name(TSRMLS_C), ifx_error(ifx), cursorid);
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not fetch next row on cursor %s (%s)", ifx_error(ifx), cursorid);
                                RETURN_FALSE;
                                break;
                        case IFX_NODATA:
@@ -2523,7 +2324,7 @@ EXEC SQL END DECLARE SECTION;
        ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
 
        if (strcmp(Ifx_Result->cursorid,"") == 0) {
-               php_error(E_WARNING, "%s(): Not a select cursor!", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
                RETURN_FALSE;
        }
 
@@ -2536,15 +2337,13 @@ EXEC SQL END DECLARE SECTION;
        EXEC SQL set connection :ifx;
        PHP_IFX_CHECK_CONNECTION(ifx);
 
-       if (array_init(return_value)==FAILURE) {
-               RETURN_FALSE;
-       }
+       array_init(return_value);
        num_fields = fieldcount;
        for (i = 1; i <= num_fields; i++) {
                EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :fieldname = NAME, :fieldtype = TYPE;
                if (ifx_check() < 0) {
                        IFXG(sv_sqlcode) = SQLCODE;
-                       php_error(E_WARNING, "%s(): Get descriptor (field # %d) fails (%s)", get_active_function_name(TSRMLS_C), i, ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx));
                        RETURN_FALSE;
                }
 
@@ -2681,7 +2480,7 @@ EXEC SQL END DECLARE SECTION;
        ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
 
        if (strcmp(Ifx_Result->cursorid,"") == 0) {
-               php_error(E_WARNING, "%s(): Not a select cursor!", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");
                RETURN_FALSE;
        }
 
@@ -2694,9 +2493,7 @@ EXEC SQL END DECLARE SECTION;
        EXEC SQL set connection :ifx;
        PHP_IFX_CHECK_CONNECTION(ifx);
 
-       if (array_init(return_value)==FAILURE) {
-               RETURN_FALSE;
-       }
+       array_init(return_value);
        num_fields = fieldcount;
 
        for (i = 1; i <= num_fields; i++) {
@@ -2709,7 +2506,7 @@ EXEC SQL END DECLARE SECTION;
 
                if (ifx_check() < 0) {
                        IFXG(sv_sqlcode) = SQLCODE;
-                       php_error(E_WARNING, "%s(): Get descriptor (field # %d) fails (%s)", get_active_function_name(TSRMLS_C), i, ifx_error(ifx));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_error(ifx));
                        RETURN_FALSE;
                }
                
@@ -2852,9 +2649,7 @@ PHP_FUNCTION(ifx_getsqlca)
        ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);
 
        /* create pseudo-row array to return */
-       if (array_init(return_value)==FAILURE) {
-               RETURN_FALSE;
-       }
+       array_init(return_value);
        
        /* fill array with 6 fields sqlerrd0 .. sqlerrd5 */
        /* each ESQLC call saves these sqlca values  */
@@ -2927,7 +2722,7 @@ EXEC SQL END DECLARE SECTION;
 
        for (i = 0; i < MAX_RESID; ++i) {
                if (Ifx_Result->res_id[i]>0) {
-                       zend_list_delete(Ifx_Result->res_id[i]);
+                       php_intifx2_free_blob(Ifx_Result->res_id[i],&EG(regular_list) TSRMLS_CC);
                        Ifx_Result->res_id[i]=-1;
                }
        }
@@ -2937,7 +2732,7 @@ EXEC SQL END DECLARE SECTION;
        statemid   = Ifx_Result->statemid;
        descrpid   = Ifx_Result->descrpid;
     
-       EXEC SQL set connection :ifx;
+    EXEC SQL set connection :ifx;
        PHP_IFX_CHECK_CONNECTION(ifx);
 
        EXEC SQL free :statemid;
@@ -2972,7 +2767,7 @@ static long php_intifx_getType(long id, HashTable *list TSRMLS_DC)
 
        Ifx_res = (IFX_IDRES *) zend_list_find(id,&type);
        if (type!=le_idresult) {
-               php_error(E_WARNING, "%s(): %d is not a Informix id-result index", get_active_function_name(TSRMLS_C), id);
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix id-result index", id);
                return -1;
        }
        return Ifx_res->type;
@@ -2994,29 +2789,29 @@ static long php_intifx_getType(long id, HashTable *list TSRMLS_DC)
    Creates a blob-object */
 PHP_FUNCTION(ifx_create_blob) 
 {
-       zval *pmode, *pparam,*ptype;
+       zval **pmode, **pparam,**ptype;
        long id;
        long mode,type;
   
-       if (ZEND_NUM_ARGS()!=3 || getParameters(ht, 3, &ptype,&pmode,&pparam)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=3 || zend_get_parameters_ex(3, &ptype,&pmode,&pparam) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
 
-       convert_to_long(pmode);
-       convert_to_string(pparam);
-       convert_to_long(ptype);
+       convert_to_long_ex(pmode);
+       convert_to_string_ex(pparam);
+       convert_to_long_ex(ptype);
 
-       type=Z_LVAL_P(ptype);
+       type = Z_LVAL_PP(ptype);
        if(type != 0) {
-               type=TYPE_BLTEXT;
+               type = TYPE_BLTEXT;
        }
 
-       mode=Z_LVAL_P(pmode);
+       mode = Z_LVAL_PP(pmode);
        if(mode != 0) {
                mode=BLMODE_INFILE;
        }
 
-       id=php_intifx_create_blob(type,mode,Z_STRVAL_P(pparam),Z_STRLEN_P(pparam),&EG(regular_list) TSRMLS_CC); 
+       id=php_intifx_create_blob(type,mode,Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam),&EG(regular_list) TSRMLS_CC); 
 
        if(id < 0) {
                RETURN_FALSE;
@@ -3029,7 +2824,7 @@ PHP_FUNCTION(ifx_create_blob)
  * internal function
  * long php_intifx_create_blob(long type, long mode, char* param, long len, HashTable *list TSRMLS_DC)
  *
- * creates an blob-object for the PHP Resource list
+ * creates an blob-object
  *  type: 1=TEXT, 0=BYTE
  *  mode: blob-object holds 0=the content in momory, 1=content in file
  *  param: if mode=0: pointer to the content
@@ -3045,7 +2840,7 @@ static long php_intifx_create_blob(long type, long mode, char* param, long len,
 
        Ifx_blob=emalloc(sizeof(IFX_IDRES));
        if(Ifx_blob==NULL) {
-               php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
                return -1;
        }
        
@@ -3058,121 +2853,42 @@ static long php_intifx_create_blob(long type, long mode, char* param, long len,
        }
        Ifx_blob->BLOB.mode=(int)mode;
 
-       if (php_intifx_init_blob(&Ifx_blob->BLOB.blob_data, mode, 1) < 0)   {
-               php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C));
-               return -1;
-       }
-
        if(mode==BLMODE_INMEM) {
                if(len>=0) {
                        char *content=emalloc(len);
                        if(content==NULL) {
-                               php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
                                return -1;
                        }
                        memcpy(content,param,len);
+                       Ifx_blob->BLOB.blob_data.loc_loctype=LOCMEMORY;
                        Ifx_blob->BLOB.blob_data.loc_buffer=content;
                        Ifx_blob->BLOB.blob_data.loc_bufsize=len;
                        Ifx_blob->BLOB.blob_data.loc_size=len;
+                       Ifx_blob->BLOB.blob_data.loc_mflags=0;
+                       Ifx_blob->BLOB.blob_data.loc_oflags=0;
+               } else {
+                       Ifx_blob->BLOB.blob_data.loc_loctype=LOCMEMORY;
+                       Ifx_blob->BLOB.blob_data.loc_buffer=NULL;
+                       Ifx_blob->BLOB.blob_data.loc_bufsize=-1;
+                       Ifx_blob->BLOB.blob_data.loc_size=-1;
+                       Ifx_blob->BLOB.blob_data.loc_mflags=0;
                        Ifx_blob->BLOB.blob_data.loc_oflags=0;
                }
-       } 
-
-       return zend_list_insert(Ifx_blob,le_idresult);
-}
-
-static long php_intifx_init_blob(loc_t *blob, long mode, long new TSRMLS_DC)   {
-
-       if (new)   {
-               memset(blob, 0, sizeof(loc_t));
-       }
-       
-       blob->loc_status = 0;
-       blob->loc_type = SQLTEXT;
-       blob->loc_xfercount = 0;
-       blob->loc_indicator = 0;
-
-       if (mode == BLMODE_INMEM)   {
-               return php_intifx_init_blob_inmem(blob, new);
-       }
-       else   {
-               return php_intifx_init_blob_infile(blob, new);
-       }
-
-       return 1;
-}
-
-static long php_intifx_init_blob_inmem(loc_t *blob, long new TSRMLS_DC)   {
-
-       blob->loc_loctype=LOCMEMORY;
-
-       if (new)   {
-               blob->loc_buffer=NULL;
-               blob->loc_bufsize=-1;
-               blob->loc_size=0;
-       }
-       blob->loc_mflags=0;
-       blob->loc_oflags=0;
-
-       return 1;
-}
-
-static long php_intifx_init_blob_infile(loc_t *blob, long new TSRMLS_DC)   {
-
-       char *filename;
-
-       if (new)   {
-               filename = php_intifx_create_tmpfile(TSRMLS_C);
+       } else { /* mode = BLMODE_INFILE */
+               char *filename=emalloc(len+1);
                if(filename==NULL)  {
-                       php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
                        return -1;
                }
-               blob->loc_fname = filename;
-               blob->loc_size = 0;
-               blob->loc_fd = -1;
-       }
-
-       blob->loc_loctype = LOCFNAME;
-       blob->lc_union.lc_file.lc_mode = 0666;
-       blob->loc_oflags = LOC_WONLY | LOC_RONLY;
-
-       return 1;
-}
-
-static void php_intifx_release_blob(loc_t *blob TSRMLS_DC)   {
-
-       switch (blob->loc_loctype)   {
-               
-               case LOCMEMORY:
-                       
-                       if (blob->loc_buffer != NULL)   {
-                               efree(blob->loc_buffer);
-                               blob->loc_buffer = NULL;
-                       }
-                       break;
-
-               case LOCFNAME:  
-
-                       if (blob->loc_fd >= 0)   {
-                               close(blob->loc_fd);
-                       }
-                       blob->loc_fd = -1;
-               
-                       if (blob->loc_fname != NULL)   {
-                               unlink(blob->loc_fname);
-                               efree(blob->loc_fname);
-                               blob->loc_fname = NULL;
-                       }
-
-                       break;
-
-               case LOCFILE:   
-               case LOCUSER:   
-               default:
-                       break;
-
+               memcpy(filename,param,len);
+               filename[len]=0;
+               Ifx_blob->BLOB.blob_data.loc_loctype=LOCFNAME;
+               Ifx_blob->BLOB.blob_data.loc_fname=filename;
+               Ifx_blob->BLOB.blob_data.loc_oflags=LOC_WONLY;
+               Ifx_blob->BLOB.blob_data.loc_size=-1;
        }
-
+       return zend_list_insert(Ifx_blob,le_idresult);
 }
 
 /* ----------------------------------------------------------------------
@@ -3189,15 +2905,15 @@ static void php_intifx_release_blob(loc_t *blob TSRMLS_DC)   {
    Duplicates the given blob-object */
 PHP_FUNCTION(ifx_copy_blob) 
 {
-       zval *pbid;
+       zval **pbid;
        long newid;
   
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) {
+       if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pbid)==FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pbid);
+       convert_to_long_ex(pbid);
 
-       newid=php_intifx_copy_blob(Z_LVAL_P(pbid),&EG(regular_list) TSRMLS_CC); 
+       newid=php_intifx_copy_blob(Z_LVAL_PP(pbid),&EG(regular_list) TSRMLS_CC); 
        if(newid<0) {
                RETURN_FALSE;
        } 
@@ -3209,7 +2925,7 @@ PHP_FUNCTION(ifx_copy_blob)
  * internal function
  * long php_intifx_copy_blob(long bid, HashTable *list)
  *
- * duplicates the given blob-object in the PHP resource list
+ * duplicates the given blob-object
  *  bid: Id of Blobobject
  *  list: internal hashlist of php
  * 
@@ -3223,19 +2939,14 @@ static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC)
        int type;
 
        Ifx_blob_orig = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING,"%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), bid);
-               return -1;
-       }
-
-       if (!(Ifx_blob_orig->type==TYPE_BLBYTE || Ifx_blob_orig->type==TYPE_BLTEXT)) {
-               php_error(E_WARNING, "%s(): %d is not a Informix BYTE or TEXT type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult || !(Ifx_blob_orig->type==TYPE_BLBYTE || Ifx_blob_orig->type==TYPE_BLTEXT)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
                return -1;
        }
 
        Ifx_blob=emalloc(sizeof(IFX_IDRES));
        if(Ifx_blob==NULL) {
-               php_error(E_WARNING,"%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
                return -1;
        }
        
@@ -3247,33 +2958,39 @@ static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC)
        locator=&(Ifx_blob->BLOB.blob_data);
        locator_orig=&(Ifx_blob_orig->BLOB.blob_data);
 
-       if (php_intifx_init_blob(locator, Ifx_blob->BLOB.mode, 1) < 0)   {
-               php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C));
-               return -1;
-       }
-
        if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
                char *content;
-               
-               if(locator_orig->loc_bufsize>=0 && locator_orig->loc_buffer!=NULL) {
+               if(locator_orig->loc_size>=0 && locator_orig->loc_buffer!=NULL) {
                        if((content=emalloc(locator_orig->loc_size))==NULL) {
-                               php_error(E_WARNING,"%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
                                return -1;
                        }
-                       memcpy(content,locator_orig->loc_buffer,  locator_orig->loc_bufsize);
+                       memcpy(content,locator_orig->loc_buffer,  locator_orig->loc_size);
                        locator->loc_buffer=content;
-                       locator->loc_bufsize=locator_orig->loc_bufsize;
+                       locator->loc_bufsize=locator_orig->loc_size;
                        locator->loc_size=locator_orig->loc_size;
-               } 
-       } 
-       else   { /* BLMODE_INFILE */
+               } else {
+                       locator->loc_buffer=NULL;
+                       locator->loc_bufsize=-1;
+                       locator->loc_size=-1;
+               }
+               locator->loc_loctype=LOCMEMORY;
+               locator->loc_mflags=0;
+               locator->loc_oflags=0;
+       } else {  /* BLMODE_INFILE */
+               char *filename;
                
-               if (locator_orig->loc_size)   {
-                       php_copy_file(locator_orig->loc_fname, locator->loc_fname TSRMLS_C);    
+               if((filename=emalloc(strlen(locator_orig->loc_fname)+1))==NULL)  {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
+                       return -1;
                }
 
+               strcpy(filename,locator_orig->loc_fname);
+               locator->loc_loctype=LOCFNAME;
+               locator->loc_fname=filename;
+               locator->loc_size=-1;
+               locator->loc_oflags=locator_orig->loc_oflags;
        }
-
        return zend_list_insert(Ifx_blob,le_idresult);
 }
 
@@ -3290,15 +3007,15 @@ static long php_intifx_copy_blob(long bid, HashTable *list TSRMLS_DC)
    Deletes the blob-object */
 PHP_FUNCTION(ifx_free_blob) 
 {
-       zval *pid;
+       zval **pid;
        long ret;
   
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pid);
+       convert_to_long_ex(pid);
 
-       ret=php_intifx_free_blob(pid->value.lval,&EG(regular_list) TSRMLS_CC); 
+       ret=php_intifx_free_blob(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC); 
        if(ret<0) {
                RETURN_FALSE;
        } 
@@ -3310,7 +3027,7 @@ PHP_FUNCTION(ifx_free_blob)
  * internal function
  * long php_intifx_free_blob(long bid, HashTable *list)
  *
- * deletes the blob-object from the PHP Resource List
+ * deletes the blob-object
  *  bid: Id of Blobobject
  *  list: internal hashlist of php
  * 
@@ -3324,22 +3041,69 @@ static long php_intifx_free_blob(long bid, HashTable *list TSRMLS_DC)
        int type;
 
        Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING, "%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
                return -1;
        }
 
-       if (!(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
-               php_error(E_WARNING, "%s(): %d is not a Informix BYTE or TEXT type", get_active_function_name(TSRMLS_C), bid);
+       if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
+               if(Ifx_blob->BLOB.blob_data.loc_buffer==NULL || Ifx_blob->BLOB.blob_data.loc_size<=0) {;} else {
+                       efree(Ifx_blob->BLOB.blob_data.loc_buffer);  
+               }
+       } else {   /* BLMODE_INFILE */
+               if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) {
+                       efree(Ifx_blob->BLOB.blob_data.loc_fname); 
+               }
+       }
+       zend_list_delete(bid);
+       efree(Ifx_blob); 
+       return 0;
+}
+
+/* ----------------------------------------------------------------------
+ * internal function
+ * long php_intifx2_free_blob(long bid, HashTable *list)
+ *
+ * deletes the blob-object
+ *  bid: Id of Blobobject
+ *  list: internal hashlist of php
+ * 
+ * return -1 on error otherwise 0
+ * FREES BYTE-MEMORY WITH FREE(), for blob memory allocated by ESQL/C  
+ * use this for freeing blob-source after select (in ifx_free_result)
+ * ----------------------------------------------------------------------
+*/
+static long php_intifx2_free_blob(long bid, HashTable *list TSRMLS_DC) 
+{
+       IFX_IDRES *Ifx_blob; 
+       int type;
+
+       Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
+       if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
                return -1;
        }
 
-       zend_list_delete(bid);
+#if IFX_VERSION < 724 /* this Informix  memory leak is fixed from 7.24 on     */
+                      /* according to the current PERL DBD::Informix          */
+                      /* and otherwise I get segmenation violations with 7.30 */
 
+       if(Ifx_blob->BLOB.mode==BLMODE_INMEM) {
+               if(Ifx_blob->BLOB.blob_data.loc_buffer==NULL || Ifx_blob->BLOB.blob_data.loc_size<=0) {;} else {
+                       free(Ifx_blob->BLOB.blob_data.loc_buffer);  
+               }
+       } else {
+               if(Ifx_blob->BLOB.blob_data.loc_fname!=NULL) {
+                       efree(Ifx_blob->BLOB.blob_data.loc_fname); 
+               }
+       }
+#endif
+  
+       zend_list_delete(bid);
+       efree(Ifx_blob); 
        return 0;
 }
 
-
 /* ----------------------------------------------------------------------
 ** string ifx_get_blob(int bid)
 **
@@ -3353,16 +3117,16 @@ static long php_intifx_free_blob(long bid, HashTable *list TSRMLS_DC)
    Returns the content of the blob-object */
 PHP_FUNCTION(ifx_get_blob) 
 {
-       zval *pbid;
+       zval **pbid;
        char *content;
        long len;
   
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pbid);
+       convert_to_long_ex(pbid);
 
-       len=php_intifx_get_blob(pbid->value.lval,&EG(regular_list),&content TSRMLS_CC); 
+       len=php_intifx_get_blob(Z_LVAL_PP(pbid),&EG(regular_list),&content TSRMLS_CC); 
        if(content==NULL || len<0) {
                RETURN_STRING(php_intifx_null(TSRMLS_C),1);
        }
@@ -3388,13 +3152,8 @@ static long php_intifx_get_blob(long bid, HashTable *list, char** content TSRMLS
        int type;
 
        Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING, "%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), bid);
-               return -1;
-       }
-
-       if (!(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
-               php_error(E_WARNING, "%s(): %d is not a Informix BYTE or TEXT type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
                return -1;
        }
 
@@ -3422,16 +3181,10 @@ static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC)
        int type;
 
        Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING, "%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
                return NULL;
        }
-       
-       if (!(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
-               php_error(E_WARNING, "%s(): %d is not a Informix BYTE or TEXT type", get_active_function_name(TSRMLS_C), bid);
-               return NULL;
-       }
-
        return &(Ifx_blob->BLOB.blob_data);
 }
 
@@ -3451,15 +3204,15 @@ static loc_t *php_intifx_get_blobloc(long bid, HashTable *list TSRMLS_DC)
    Updates the content of the blob-object */
 PHP_FUNCTION(ifx_update_blob) 
 {
-       zval *pbid, *pparam;
+       zval **pbid, **pparam;
   
-       if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid,&pparam)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=2 || zend_get_parameters_ex(2, &pbid,&pparam) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pbid);
-       convert_to_string(pparam);
+       convert_to_long_ex(pbid);
+       convert_to_string_ex(pparam);
 
-       if(php_intifx_update_blob(Z_LVAL_P(pbid),Z_STRVAL_P(pparam),Z_STRLEN_P(pparam), &EG(regular_list) TSRMLS_CC) < 0) { 
+       if(php_intifx_update_blob(Z_LVAL_PP(pbid),Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam), &EG(regular_list) TSRMLS_CC) < 0) { 
                RETURN_FALSE;
        } 
        RETURN_TRUE;
@@ -3484,13 +3237,8 @@ static long php_intifx_update_blob(long bid, char* param, long len, HashTable *l
        int type;
 
        Ifx_blob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING,"%s(): %d is not a Informix blob-result index", get_active_function_name(TSRMLS_C), bid);
-               return -1;
-       }
-
-       if (!(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
-               php_error(E_WARNING, "%s(): %d is not a Informix BYTE or TEXT type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult && !(Ifx_blob->type==TYPE_BLTEXT || Ifx_blob->type==TYPE_BLBYTE)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix blob-result index", bid);
                return -1;
        }
 
@@ -3502,7 +3250,7 @@ static long php_intifx_update_blob(long bid, char* param, long len, HashTable *l
                }
                if(len >= 0) {
                        if((content=emalloc(len))==NULL) {
-                               php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C));
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
                                return -1;
                        }
                        memcpy(content,param, len);
@@ -3523,7 +3271,7 @@ static long php_intifx_update_blob(long bid, char* param, long len, HashTable *l
                        efree(Ifx_blob->BLOB.blob_data.loc_fname);
                }
                if((filename=emalloc(len+1))==NULL)  {
-                       php_error(E_WARNING, "%s(): Can't create blob-resource", get_active_function_name(TSRMLS_C));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create blob-resource");
                        return -1;
                }
                memcpy(filename,param, len);
@@ -3537,11 +3285,11 @@ static long php_intifx_update_blob(long bid, char* param, long len, HashTable *l
 /*-------------------------------------------------
  * internal function
  *
- * php_intifx_create_tmpfile(TSRMLS_DC)
+ * php_intifx_create_tmpfile(long bid TSRMLS_DC)
  * creates a temporary file to store a blob in 
  *-------------------------------------------------
 */
-static char* php_intifx_create_tmpfile(TSRMLS_DC) 
+static char* php_intifx_create_tmpfile(long bid TSRMLS_DC) 
 {
        char filename[10];
        char *blobdir;
@@ -3552,12 +3300,11 @@ static char* php_intifx_create_tmpfile(TSRMLS_DC)
        if ((blobdir = getenv("php_blobdir")) == NULL) {
                blobdir=".";
        }
-       sprintf(filename,"blb");
+       sprintf(filename,"blb%d",(int)bid);
 
        if ((fp = php_open_temporary_file(blobdir, filename, &opened_path TSRMLS_CC))) {
                fclose(fp);
                retval=estrndup(opened_path, strlen(opened_path));
-               efree(opened_path);
        } else {
                retval=NULL;
        }
@@ -3578,14 +3325,14 @@ static char* php_intifx_create_tmpfile(TSRMLS_DC)
    Sets the default blob-mode for all select-queries  */
 PHP_FUNCTION(ifx_blobinfile_mode) 
 {
-       zval *pmode;
+       zval **pmode;
 
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pmode);
+       convert_to_long_ex(pmode);
 
-       IFXG(blobinfile)=Z_LVAL_P(pmode);
+       IFXG(blobinfile)=Z_LVAL_PP(pmode);
        RETURN_TRUE;
 }
 /* }}} */
@@ -3604,14 +3351,14 @@ PHP_FUNCTION(ifx_blobinfile_mode)
    Sets the default text-mode for all select-queries */
 PHP_FUNCTION(ifx_textasvarchar) 
 {
-       zval *pmode;
+       zval **pmode;
        
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pmode);
+       convert_to_long_ex(pmode);
 
-       IFXG(textasvarchar)=Z_LVAL_P(pmode);
+       IFXG(textasvarchar)=Z_LVAL_PP(pmode);
        RETURN_TRUE;
 }
 /* }}} */
@@ -3630,14 +3377,14 @@ PHP_FUNCTION(ifx_textasvarchar)
    Sets the default byte-mode for all select-queries  */
 PHP_FUNCTION(ifx_byteasvarchar) 
 {
-       zval *pmode;
+       zval **pmode;
 
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pmode);
+       convert_to_long_ex(pmode);
 
-       IFXG(byteasvarchar)=Z_LVAL_P(pmode);
+       IFXG(byteasvarchar)=Z_LVAL_PP(pmode);
        RETURN_TRUE;
 }
 
@@ -3655,154 +3402,19 @@ PHP_FUNCTION(ifx_byteasvarchar)
    Sets the default return value of a NULL-value on a fetch-row  */
 PHP_FUNCTION(ifx_nullformat)
 {
-       zval *pmode;
+       zval **pmode;
        
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pmode) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pmode);
+       convert_to_long_ex(pmode);
 
-       IFXG(nullformat)=Z_LVAL_P(pmode);
+       IFXG(nullformat)=Z_LVAL_PP(pmode);
        RETURN_TRUE;
 }
 /* }}} */
 
 
-/* ----------------------------------------------------------------------
- * int php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC)
- *
- * Allocates descriptors for input parameters
- * return 0 for error. 1 for ok
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_alloc_ibind(IFX_RES *Ifx_Result, int items TSRMLS_DC)   {
-
-       EXEC SQL BEGIN DECLARE SECTION;
-       char *i_bind = Ifx_Result->i_descrpid;
-       int bind_size = items;
-       EXEC SQL END DECLARE SECTION;
-
-       if (items > Ifx_Result->numicols)   {
-               
-               if (Ifx_Result->numicols > 0)   {
-                       EXEC SQL DEALLOCATE DESCRIPTOR :i_bind;
-                       if (ifx_check() < 0)   {
-                               return 0;
-                       }
-               }
-
-               EXEC SQL ALLOCATE DESCRIPTOR :i_bind WITH MAX :bind_size;
-               if (ifx_check() < 0)   {
-                       return 0;
-               }
-
-               Ifx_Result->numicols = items;
-       }
-
-       return 1;
-
-}
-
-/* ----------------------------------------------------------------------
- * int php_intifx_preparse(char *statement TSRMLS_DC)
- *
- * Count the placeholders (?) parameters in the statement
- * return -1 for error. 0 or number of question marks
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_preparse(char *statement TSRMLS_DC)   {
-
-       
-        char            end_quote = '\0';
-        char           *src;
-        char           *dst;
-        int             idx = 0;
-        int             style = 0;
-        int             laststyle = 0;
-        char            ch;
-
-        src = statement;
-        dst = statement;
-        while ((ch = *src++) != '\0')
-        {
-                if (ch == end_quote)
-                        end_quote = '\0';
-                else if (end_quote != '\0')
-                {
-                        *dst++ = ch;
-                        continue;
-                }
-                else if (ch == '\'' || ch == '\"')
-                        end_quote = ch;
-                else if (ch == '{')
-                        end_quote = '}';
-                else if (ch == '-' && *src == '-')
-                {
-                        end_quote = '\n';
-                }
-                if (ch == '?')
-                {
-                        /* X/Open standard       */
-                        *dst++ = '?';
-                        idx++;
-                        style = 3;
-                }
-                else
-                {
-                        /* Perhaps ':=' PL/SQL construct or dbase:table in Informix */
-                        /* Or it could be :2 or :22 as part of a DATETIME/INTERVAL */
-                        *dst++ = ch;
-                        continue;
-                }
-                if (laststyle && style != laststyle)
-                        return -1;
-
-                laststyle = style;
-        }
-
-        *dst = '\0';
-        return(idx);
-
-}
-
-
-/* ----------------------------------------------------------------------
- * int php_intifx_count_descriptors(char *p_statemid TSRMLS_DC)
- *
- * count the number of descriptors allocated for a certain statement
- * return 384 or number of descriptors
- * ----------------------------------------------------------------------
-*/
-static long php_intifx_count_descriptors(char *p_statemid TSRMLS_DC)   {
-       
-       EXEC SQL BEGIN DECLARE SECTION;
-       char *statemid = p_statemid;
-       EXEC SQL END DECLARE SECTION;
-
-       struct sqlda *s_da;
-       int ret = 384;
-
-       EXEC SQL DESCRIBE :statemid INTO s_da;
-
-       if (ifx_check() >= 0)   {
-
-               ret = s_da->sqld;
-               
-/*
- * Thanks to DBD-Informix
- */
-
-#if (ESQLC_VERSION >= 720 || (ESQLC_VERSION >= 501 && ESQLC_VERSION < 600))
-               SqlFreeMem(s_da, SQLDA_FREE);
-#else
-               free(s_da);
-#endif
-       }
-
-       return ret;
-
-}
-
 /* ----------------------------------------------------------------------
  * void php_intifx_null()
  *
@@ -3835,15 +3447,15 @@ static char* php_intifx_null(TSRMLS_D)
    Creates a char-object */
 PHP_FUNCTION(ifx_create_char)
 {
-       zval *pparam;
+       zval **pparam;
        long id;
   
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pparam)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pparam) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_string(pparam);
+       convert_to_string_ex(pparam);
 
-       id=php_intifx_create_char(Z_STRVAL_P(pparam),Z_STRLEN_P(pparam),&EG(regular_list) TSRMLS_CC); 
+       id=php_intifx_create_char(Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam),&EG(regular_list) TSRMLS_CC); 
        
        if(id < 0) {
                RETURN_FALSE;
@@ -3869,7 +3481,7 @@ static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS
 
        Ifx_char=emalloc(sizeof(IFX_IDRES));
        if(Ifx_char==NULL) {
-               php_error(E_WARNING, "%s(): Can't create char-resource", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource");
                return -1;
        }
 
@@ -3882,7 +3494,7 @@ static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS
                Ifx_char->CHAR.char_data=emalloc(len+1);
                if(Ifx_char->CHAR.char_data==NULL) {
                        efree(Ifx_char);
-                       php_error(E_WARNING, "%s(): Can't create char-resource", get_active_function_name(TSRMLS_C));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource");
                        return -1;
                }
                memcpy(Ifx_char->CHAR.char_data,param,len);
@@ -3905,16 +3517,16 @@ static long php_intifx_create_char(char* param, long len, HashTable *list TSRMLS
    Returns the content of the char-object */
 PHP_FUNCTION(ifx_get_char) 
 {
-       zval *pbid;
+       zval **pbid;
        char *content;
        long len;
 
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pbid);
+       convert_to_long_ex(pbid);
 
-       len=php_intifx_get_char(Z_LVAL_P(pbid),&EG(regular_list),&content TSRMLS_CC); 
+       len=php_intifx_get_char(Z_LVAL_PP(pbid),&EG(regular_list),&content TSRMLS_CC); 
        if(content==NULL || len < 0) {
                RETURN_STRING("",1);
        }
@@ -3940,17 +3552,11 @@ static long php_intifx_get_char(long bid, HashTable *list, char** content TSRMLS
        int type;
 
        Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING, "%s(): %d is not a Informix char-result index", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid);
                return -1;
        }
 
-       if (!Ifx_char->type==TYPE_CHAR) {
-               php_error(E_WARNING, "%s(): %d is not a Informix CHAR type", get_active_function_name(TSRMLS_C), bid);
-               return -1;
-       }
-
-
        *content=Ifx_char->CHAR.char_data;
        return Ifx_char->CHAR.len;
 }
@@ -3968,14 +3574,14 @@ static long php_intifx_get_char(long bid, HashTable *list, char** content TSRMLS
    Deletes the char-object */
 PHP_FUNCTION(ifx_free_char) 
 {
-       zval *pid;
+       zval **pid;
   
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pid);
+       convert_to_long_ex(pid);
 
-       if(php_intifx_free_char(Z_LVAL_P(pid),&EG(regular_list) TSRMLS_CC) < 0) {
+       if(php_intifx_free_char(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC) < 0) {
                RETURN_FALSE;
        }
        RETURN_TRUE;
@@ -3999,13 +3605,8 @@ static long php_intifx_free_char(long bid, HashTable *list TSRMLS_DC)
        int type;
 
        Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING, "%s(): %d is not a Informix char-result index", get_active_function_name(TSRMLS_C), bid);
-               return -1;
-       }
-
-       if (!Ifx_char->type==TYPE_CHAR) {
-               php_error(E_WARNING, "%s(): %d is not a Informix CHAR type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid);
                return -1;
        }
 
@@ -4031,15 +3632,15 @@ static long php_intifx_free_char(long bid, HashTable *list TSRMLS_DC)
    Updates the content of the char-object */
 PHP_FUNCTION(ifx_update_char)
 {
-       zval *pbid,*pparam;
+       zval **pbid, **pparam;
   
-       if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid,&pparam)==FAILURE) {
+       if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &pbid,&pparam) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pbid);
-       convert_to_string(pparam);
+       convert_to_long_ex(pbid);
+       convert_to_string_ex(pparam);
  
-       if(php_intifx_update_char(Z_LVAL_P(pbid),Z_STRVAL_P(pparam),Z_STRLEN_P(pparam),&EG(regular_list) TSRMLS_CC) < 0) {
+       if(php_intifx_update_char(Z_LVAL_PP(pbid),Z_STRVAL_PP(pparam),Z_STRLEN_PP(pparam),&EG(regular_list) TSRMLS_CC) < 0) {
                RETURN_FALSE;
        }
        RETURN_TRUE;
@@ -4064,13 +3665,8 @@ static long php_intifx_update_char(long bid, char* param, long len, HashTable *l
        int type;
 
        Ifx_char = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING, "%s(): %d is not a Informix char-result index", get_active_function_name(TSRMLS_C), bid);
-               return -1;
-       }
-
-       if (!Ifx_char->type==TYPE_CHAR) {
-               php_error(E_WARNING, "%s(): %d is not a Informix CHAR type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult && !(Ifx_char->type==TYPE_CHAR)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix char-result index", bid);
                return -1;
        }
 
@@ -4086,7 +3682,7 @@ static long php_intifx_update_char(long bid, char* param, long len, HashTable *l
        } else {
                Ifx_char->CHAR.char_data=emalloc(len+1);
                if(Ifx_char->CHAR.char_data==NULL) {
-                       php_error(E_WARNING, "%s(): Can't create char-resource", get_active_function_name(TSRMLS_C));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create char-resource");
                        return -1;
                }
                memcpy(Ifx_char->CHAR.char_data,param,len);
@@ -4096,7 +3692,6 @@ static long php_intifx_update_char(long bid, char* param, long len, HashTable *l
        return 0;
 }
 
-
 $ifdef HAVE_IFX_IUS;
 
 /* ----------------------------------------------------------------------
@@ -4112,15 +3707,15 @@ $ifdef HAVE_IFX_IUS;
    Creates a slob-object and opens it */
 PHP_FUNCTION(ifxus_create_slob)
 {
-       zval *pmode;
+       zval **pmode;
        long id;
        long mode,create_mode;
   
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pmode)==FAILURE) {
+       if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pmode)==FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pmode);
-       mode=Z_LVAL_P(pmode);
+       convert_to_long_ex(pmode);
+       mode=Z_LVAL_PP(pmode);
  
        create_mode=0;
        if((mode&1) !=0)   
@@ -4136,7 +3731,7 @@ PHP_FUNCTION(ifxus_create_slob)
        if((mode&32) !=0)   
                create_mode|=LO_NOBUFFER;
        
-       id=php_intifxus_create_slob(create_mode,&EG(regular_list)); 
+       id = php_intifxus_create_slob(create_mode, &EG(regular_list) TSRMLS_CC); 
        
        if(id < 0) {
                RETURN_FALSE;
@@ -4162,20 +3757,20 @@ static long php_intifxus_create_slob(long create_mode, HashTable *list TSRMLS_DC
        
        Ifx_slob=emalloc(sizeof(IFX_IDRES));
        if(Ifx_slob==NULL) {
-               php_error(E_WARNING, "%s(): Can't create slob-resource", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource");
                return -1;
        }
 
        errcode=ifx_lo_def_create_spec(&(Ifx_slob->SLOB.createspec));
        if(errcode<0) {
-               php_error(E_WARNING, "%s(): Can't create slob-resource: %d", get_active_function_name(TSRMLS_C), errcode);
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource: %d", errcode);
                return -1;
        }
 
        Ifx_slob->type=TYPE_SLOB;
        Ifx_slob->SLOB.lofd=ifx_lo_create(Ifx_slob->SLOB.createspec,create_mode,&(Ifx_slob->SLOB.slob_data),&errcode);
        if(errcode<0 || Ifx_slob->SLOB.lofd<0) {
-               php_error(E_WARNING, "%s(): Can't create slob-resource: %d", get_active_function_name(TSRMLS_C), errcode);
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource: %d", errcode);
                return -1;
        }
        return zend_list_insert(Ifx_slob,le_idresult);
@@ -4194,14 +3789,14 @@ static long php_intifxus_create_slob(long create_mode, HashTable *list TSRMLS_DC
    Deletes the slob-object */
 PHP_FUNCTION(ifxus_free_slob) 
 {
-       zval *pid;
+       zval **pid;
 
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pid);
+       convert_to_long_ex(pid);
 
-       if(php_intifxus_free_slob(Z_LVAL_P(pid),&EG(regular_list) TSRMLS_CC) < 0) {
+       if(php_intifxus_free_slob(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC) < 0) {
                RETURN_FALSE;
        }
        RETURN_TRUE;
@@ -4225,16 +3820,11 @@ static long php_intifxus_free_slob(long bid, HashTable *list TSRMLS_DC)
        int type;
        
        Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid);
-               return -1;
-       }
-
-       if (Ifx_slob->type!=TYPE_SLOB) {
-               php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
                return -1;
        }
-
+       
        if(php_intifxus_close_slob(bid, &EG(regular_list) TSRMLS_CC) < 0) {
                return -1;
        }
@@ -4261,13 +3851,13 @@ static long php_intifxus_free_slob(long bid, HashTable *list TSRMLS_DC)
    Deletes the slob-object */
 PHP_FUNCTION(ifxus_close_slob)
 {
-       zval *pid;
+       zval **pid;
        
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pid)==FAILURE) {
+       if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pid) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pid);
-       if(php_intifxus_close_slob(Z_LVAL_P(pid),&EG(regular_list) TSRMLS_CC) < 0) {
+       convert_to_long_ex(pid);
+       if(php_intifxus_close_slob(Z_LVAL_PP(pid),&EG(regular_list) TSRMLS_CC) < 0) {
                RETURN_FALSE;
        }
        RETURN_TRUE;
@@ -4291,23 +3881,18 @@ static long php_intifxus_close_slob(long bid, HashTable *list TSRMLS_DC)
        int type;
 
        Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid);
-               return -1;
-       }
-
-       if (Ifx_slob->type!=TYPE_SLOB) {
-               php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
                return -1;
        }
-
+       
        if(Ifx_slob->SLOB.lofd<0) {
-               php_error(E_WARNING, "%s(): Slob-resource already closed", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Slob-resource already closed");
                return -1;
        }
 
        if(ifx_lo_close(Ifx_slob->SLOB.lofd)<0) {
-               php_error(E_WARNING, "%s(): Can't close slob-resource", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't close slob-resource");
                return -1;
        }
        Ifx_slob->SLOB.lofd=-1;
@@ -4328,15 +3913,15 @@ static long php_intifxus_close_slob(long bid, HashTable *list TSRMLS_DC)
    Opens an slob-object */
 PHP_FUNCTION(ifxus_open_slob)
 {
-       zval *pbid,*pmode;
+       zval **pbid, **pmode;
        long mode,create_mode;
          
-       if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 1, &pbid,&pmode)==FAILURE) {
+       if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(1, &pbid, &pmode) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pmode);
-       convert_to_long(pbid);
-       mode=Z_LVAL_P(pmode);
+       convert_to_long_ex(pmode);
+       convert_to_long_ex(pbid);
+       mode=Z_LVAL_PP(pmode);
 
        create_mode=0;
        if((mode&1) !=0)   
@@ -4352,7 +3937,7 @@ PHP_FUNCTION(ifxus_open_slob)
        if((mode&32) !=0)   
                create_mode|=LO_NOBUFFER;
 
-       RETURN_LONG(php_intifxus_open_slob(Z_LVAL_P(pbid),create_mode,&EG(regular_list) TSRMLS_CC));
+       RETURN_LONG(php_intifxus_open_slob(Z_LVAL_PP(pbid),create_mode,&EG(regular_list) TSRMLS_CC));
 }
 /* }}} */
 
@@ -4374,24 +3959,19 @@ static long php_intifxus_open_slob(long bid, long create_mode, HashTable *list T
        int type;
 
        Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid);
-               return -1;
-       }
-
-       if (Ifx_slob->type!=TYPE_SLOB) {
-               php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
                return -1;
        }
 
        if(Ifx_slob->SLOB.lofd>0) {
-               php_error(E_WARNING, "%s(): Slob-resource already open", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Slob-resource already open");
                return -1;
        }
 
        Ifx_slob->SLOB.lofd=ifx_lo_open(&(Ifx_slob->SLOB.slob_data),create_mode,&errcode);
        if(errcode < 0 || Ifx_slob->SLOB.lofd < 0) {
-               php_error(E_WARNING, "%s(): Can't open slob-resource: %d", get_active_function_name(TSRMLS_C), errcode);
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't open slob-resource: %d", errcode);
                return -1;
        }
        return 0;
@@ -4399,20 +3979,20 @@ static long php_intifxus_open_slob(long bid, long create_mode, HashTable *list T
 
 /* ----------------------------------------------------------------------
  * internal function
- * long php_intifxus_new_slob(HashTable *list)
+ * long php_intifxus_new_slob(HashTable *list TSRMLS_DC)
  *
  * creates an slob-object but don't open it
  *  list: internal hashlist of php
  * return -1 on error otherwise the new slob-Object-id
  * ----------------------------------------------------------------------
 */
-static long php_intifxus_new_slob(HashTable *list)
+static long php_intifxus_new_slob(HashTable *list TSRMLS_DC)
 {
        IFX_IDRES *Ifx_slob;
 
        Ifx_slob=emalloc(sizeof(IFX_IDRES));
        if(Ifx_slob==NULL) {
-               php_error(E_WARNING, "%s(): Can't create slob-resource", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't create slob-resource");
                return -1;
        }
        
@@ -4437,16 +4017,10 @@ static ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list TSRMLS_DC)
        int type;
 
        Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid);
-               return NULL;
-       }
-
-       if (Ifx_slob->type!=TYPE_SLOB) {
-               php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult  || Ifx_slob->type!=TYPE_SLOB) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
                return NULL;
        }
-
        return &(Ifx_slob->SLOB.slob_data);
 }
 
@@ -4463,37 +4037,32 @@ static ifx_lo_t *php_intifxus_get_slobloc(long bid, HashTable *list TSRMLS_DC)
    Returns the current file or seek position of an open slob-object */
 PHP_FUNCTION(ifxus_tell_slob)
 {
-       zval *pbid;
+       zval **pbid;
        long bid;
        IFX_IDRES *Ifx_slob;
        ifx_int8_t akt_seek_pos;
        int type;
        long lakt_seek_pos;
 
-       if (ZEND_NUM_ARGS()!=1 || getParameters(ht, 1, &pbid)==FAILURE) {
+       if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pbid) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pbid);
-       bid=Z_LVAL_P(pbid);
+       convert_to_long_ex(pbid);
+       bid=Z_LVAL_PP(pbid);
 
        Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   { 
-               php_error(E_WARNING,"%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid);
-               RETURN_FALSE;
-       }
-
-       if (Ifx_slob->type!=TYPE_SLOB) {
-               php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
                RETURN_FALSE;
        }
 
        if(ifx_lo_tell(Ifx_slob->SLOB.lofd,&akt_seek_pos)<0) {
-               php_error(E_WARNING,"%s(): Can't perform tell-operation", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't perform tell-operation");
                RETURN_FALSE;
        }
 
        if(ifx_int8tolong(&akt_seek_pos,&lakt_seek_pos)<0) {
-               php_error(E_WARNING, "%s(): Seek-position to large for long", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Seek-position to large for long");
                RETURN_FALSE;
        }
        RETURN_LONG(lakt_seek_pos);
@@ -4515,47 +4084,42 @@ PHP_FUNCTION(ifxus_tell_slob)
    Sets the current file or seek position of an open slob-object */
 PHP_FUNCTION(ifxus_seek_slob)
 {
-       zval *pbid, *pmode, *poffset;
+       zval **pbid, **pmode, **poffset;
        long bid,lakt_seek_pos;
        IFX_IDRES *Ifx_slob;
        ifx_int8_t akt_seek_pos,offset;
        int type,mode;
 
-       if (ZEND_NUM_ARGS()!=3 || getParameters(ht, 3, &pbid, &pmode, &poffset)==FAILURE) {
+       if (ZEND_NUM_ARGS() !=3 || zend_get_parameters_ex(3, &pbid, &pmode, &poffset) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pbid);
-       convert_to_long(pmode); 
-       convert_to_long(poffset);
+       convert_to_long_ex(pbid);
+       convert_to_long_ex(pmode); 
+       convert_to_long_ex(poffset);
  
-       bid=Z_LVAL_P(pbid);
+       bid=Z_LVAL_PP(pbid);
        Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult) {
-               php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid);
-               RETURN_FALSE;
-       }
-
-       if (Ifx_slob->type!=TYPE_SLOB)   {
-               php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
                RETURN_FALSE;
        }
 
        mode=LO_SEEK_SET;
-       if(Z_LVAL_P(pmode)==1) {
+       if(Z_LVAL_PP(pmode)==1) {
                mode=LO_SEEK_CUR;
        }
-       if(Z_LVAL_P(pmode)==2) {
+       if(Z_LVAL_PP(pmode)==2) {
                mode=LO_SEEK_END;
        }
 
-       ifx_int8cvlong(Z_LVAL_P(poffset),&offset);
+       ifx_int8cvlong(Z_LVAL_PP(poffset),&offset);
        if(ifx_lo_seek(Ifx_slob->SLOB.lofd,&offset,mode,&akt_seek_pos)<0) {
-               php_error(E_WARNING, "%s(): Can't perform seek-operation", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't perform seek-operation");
                RETURN_FALSE;
        }
 
        if(ifx_int8tolong(&akt_seek_pos,&lakt_seek_pos)<0) {
-               php_error(E_WARNING, "%s(): Seek-position to large for long", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Seek-position to large for long");
                RETURN_FALSE;
        }
        RETURN_LONG(lakt_seek_pos);
@@ -4576,35 +4140,30 @@ PHP_FUNCTION(ifxus_seek_slob)
    Reads nbytes of the slob-object */
 PHP_FUNCTION(ifxus_read_slob) 
 {
-       zval *pbid, *pnbytes;
+       zval **pbid, **pnbytes;
        long bid, nbytes;
        IFX_IDRES *Ifx_slob;
        int errcode,type;
        char *buffer;
 
-       if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid, &pnbytes)==FAILURE) {
+       if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &pbid, &pnbytes) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pbid);
-       convert_to_long(pnbytes); 
+       convert_to_long_ex(pbid);
+       convert_to_long_ex(pnbytes); 
  
-       bid=Z_LVAL_P(pbid);
+       bid=Z_LVAL_PP(pbid);
        Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   {
-               php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid);
-               RETURN_FALSE;
-       }
-       
-       if (Ifx_slob->type!=TYPE_SLOB) {
-               php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
                RETURN_FALSE;
        }
 
-       nbytes=Z_LVAL_P(pnbytes);
+       nbytes=Z_LVAL_PP(pnbytes);
        buffer=emalloc(nbytes);
        if(ifx_lo_read(Ifx_slob->SLOB.lofd,buffer,nbytes,&errcode)<0) {
                efree(buffer);
-               php_error(E_WARNING, "%s(): Error reading slob: %d", get_active_function_name(TSRMLS_C), errcode);
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading slob: %d", errcode);
                RETURN_FALSE;
        }
        RETURN_STRINGL(buffer,nbytes,0); 
@@ -4625,40 +4184,35 @@ PHP_FUNCTION(ifxus_read_slob)
    Writes a string into the slob-object */
 PHP_FUNCTION(ifxus_write_slob) 
 {
-       zval *pbid, *pcontent;
+       zval **pbid, **pcontent;
        long bid, nbytes;
        IFX_IDRES *Ifx_slob;
        int errcode,type;
        char *buffer;
 
-       if (ZEND_NUM_ARGS()!=2 || getParameters(ht, 2, &pbid, &pcontent)==FAILURE) {
+       if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &pbid, &pcontent) == FAILURE) {
                WRONG_PARAM_COUNT;
        }
-       convert_to_long(pbid);
-       convert_to_string(pcontent); 
+       convert_to_long_ex(pbid);
+       convert_to_string_ex(pcontent); 
  
-       bid=Z_LVAL_P(pbid);
+       bid=Z_LVAL_PP(pbid);
        Ifx_slob = (IFX_IDRES *) zend_list_find(bid,&type);
-       if (type!=le_idresult)   {
-               php_error(E_WARNING, "%s(): %d is not a Informix slob-result index", get_active_function_name(TSRMLS_C), bid);
-               RETURN_FALSE;
-       }
-
-       if (Ifx_slob->type!=TYPE_SLOB) {
-               php_error(E_WARNING, "%s(): %d is not a Informix SLOB type", get_active_function_name(TSRMLS_C), bid);
+       if (type!=le_idresult || Ifx_slob->type!=TYPE_SLOB) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "%d is not a Informix slob-result index", bid);
                RETURN_FALSE;
        }
 
-       buffer=Z_STRVAL_P(pcontent);
-       nbytes=Z_STRLEN_P(pcontent);
+       buffer=Z_STRVAL_PP(pcontent);
+       nbytes=Z_STRLEN_PP(pcontent);
 
        if(nbytes<=0) {
-               php_error(E_WARNING, "%s(): String has no content", get_active_function_name(TSRMLS_C));
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "String has no content");
                RETURN_FALSE;
        }
 
        if((nbytes=ifx_lo_write(Ifx_slob->SLOB.lofd,buffer,nbytes,&errcode))<0) {
-               php_error(E_WARNING, "%s(): Error writing slob: %d", get_active_function_name(TSRMLS_C), errcode);
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error writing slob: %d", errcode);
                RETURN_FALSE;
        }