⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ifx.ec

📁 php-4.4.7学习linux时下载的源代码
💻 EC
📖 第 1 页 / 共 5 页
字号:
	RETURN_STRING(ifx_error(0), 0); /* ifx_error returns emalloced string */}/* }}} *//* ----------------------------------------------------------------------** string ifx_errormsg([int errorcode])**** returns the Informix errormessage associated with ** the most recent Informix error if SQLCODE is nonzero, or,** when the optional "errocode" param is present, the errormessage ** corresponding to "errorcode".** ----------------------------------------------------------------------*//* {{{ proto string ifx_errormsg([int errorcode])   Returns the Informix errormessage associated with  */PHP_FUNCTION(ifx_errormsg){	zval **errcode;	int ifx_errorcode;	int msglen, maxmsglen;	char *ifx_errmsg;	char * returnmsg;	switch(ZEND_NUM_ARGS()) {		case 0:			if (IFXG(sv_sqlcode) == 0) {				ifx_errorcode = SQLCODE;			} else {				ifx_errorcode = IFXG(sv_sqlcode);			}			break;		case 1:			if (zend_get_parameters_ex(1, &errcode) == FAILURE) {				RETURN_FALSE;			}			convert_to_long_ex(errcode);			ifx_errorcode = Z_LVAL_PP(errcode);			break;		default:			WRONG_PARAM_COUNT;		break;	}	maxmsglen = 255;	msglen = maxmsglen;     /* Some bug fix, rgetlmsg doesnt always set the value */	ifx_errmsg = (char *)emalloc(maxmsglen + 1);	if (ifx_errorcode != 0) {		rgetlmsg(ifx_errorcode, ifx_errmsg, maxmsglen, &msglen);		if (msglen > maxmsglen) {			maxmsglen = msglen;			ifx_errmsg = (char *)erealloc(ifx_errmsg, maxmsglen + 1);			rgetlmsg(ifx_errorcode, ifx_errmsg, maxmsglen, &msglen);		}	} else {		ifx_errmsg[0] = 0;	}		returnmsg = (char *) emalloc(strlen(ifx_errmsg) + 128);	sprintf(returnmsg, ifx_errmsg, sqlca.sqlerrm);	efree(ifx_errmsg);	RETURN_STRING(returnmsg,0); }/* }}} *//* --------------------------------------------------------------** int ifx_affected_rows(int resultid)**** returns the number of rows affected by query $resultid**** for selects : estimated number of rows (sqlerrd[0])** for insert/update/delete : real number (sqlerrd[2])** ---------------------------------------------------------------*//* {{{ proto int ifx_affected_rows(resource resultid)   Returns the number of rows affected by query identified by resultid */PHP_FUNCTION(ifx_affected_rows){	zval **result;	IFX_RES *Ifx_Result;	if (ZEND_NUM_ARGS() != 1 || (zend_get_parameters_ex(1, &result)) == FAILURE) {		WRONG_PARAM_COUNT;	}	IFXG(sv_sqlcode) = 0;	ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);	RETURN_LONG(Ifx_Result->affected_rows);}/* }}} *//* ----------------------------------------------------------------------** array ifx_fetch_row(int resultid [, mixed $position])**** fetches the next row, or if using a scroll cursor, and position** is present, the row as given in position, into an associative** array with the fieldnames as key**** returns FALSE on error**** position can be : "FIRST", "NEXT", "LAST", "PREVIOUS", "CURRENT" ** or an absolute row number** ----------------------------------------------------------------------*//* {{{ proto array ifx_fetch_row(resource resultid [, mixed position])   Fetches the next row or <position> row if using a scroll cursor */PHP_FUNCTION(ifx_fetch_row){	zval **result, **position;	IFX_RES *Ifx_Result;EXEC SQL BEGIN DECLARE SECTION;	char *ifx;                /* connection ID    */	char *cursorid;           /* query cursor id  */	char *statemid;           /* statement id     */	char *descrpid;           /* descriptor id    */	int  fieldcount;          /* field count      */	int   i;                  /* an index         */ 	char  fieldname[64];      /* fieldname        */	short fieldtype;          /* field type       */	int   fieldleng;          /* field length     */$ifdef HAVE_IFX_IUS;	ifx_int8_t int8_var;	lvarchar   *lvar_tmp;$endif;	short      indicator;	int        int_data;	char       *char_data;	long       date_data;	interval   intvl_data = {0};	datetime   dt_data = {0};	decimal    dec_data = {0};	short      short_data;	loc_t      *locator_b;$ifdef HAVE_IFX_IUS;	fixed binary 'blob' ifx_lo_t *slocator;$endif;	float      float_data;	double     double_data;	int        fetch_row;EXEC SQL END DECLARE SECTION;	int num_fields;	int locind,bid,bid_b;	char string_data[256];	long long_data;	char *p;	char *fetch_pos;	char *nullstr;	switch (ZEND_NUM_ARGS()) {		case 1:			if (zend_get_parameters_ex(1, &result) == FAILURE) {				RETURN_FALSE;			}			fetch_pos = NULL;			fetch_row = 0;			break;		case 2:			if (zend_get_parameters_ex(2, &result, &position) == FAILURE) {				RETURN_FALSE;			}			if (Z_TYPE_PP(position) != IS_STRING) {				fetch_pos = NULL;				fetch_row = Z_LVAL_PP(position);			} else {				fetch_pos = Z_STRVAL_PP(position);				fetch_row = 0;			}			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE(Ifx_Result, IFX_RES *, result, -1, "Informix Result", le_result);	nullstr = php_intifx_null(TSRMLS_C);	IFXG(sv_sqlcode) = 0;	if (strcmp(Ifx_Result->cursorid, "") == 0) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not a select cursor!");		RETURN_FALSE;	}		ifx        = Ifx_Result->connecid;	cursorid   = Ifx_Result->cursorid;	statemid   = Ifx_Result->statemid;	descrpid   = Ifx_Result->descrpid;	fieldcount = Ifx_Result->numcols;	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_CC)) == NULL)   {				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cant get BLOB from Result Set!");				RETURN_FALSE;			}			locind++;			if (IFXG(blobinfile) == 0)   {				php_intifx_init_blob(locator_b, BLMODE_INMEM, 1 TSRMLS_CC);			} else {				php_intifx_init_blob(locator_b, BLMODE_INFILE, 1 TSRMLS_CC);			}			EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*locator_b;		}	}				if (!Ifx_Result->isscroll) {		EXEC SQL FETCH :cursorid USING SQL DESCRIPTOR :descrpid;	} else {		if (fetch_pos == NULL) {			if (fetch_row != 0) {				EXEC SQL FETCH ABSOLUTE :fetch_row :cursorid USING SQL DESCRIPTOR :descrpid;			} else {				EXEC SQL FETCH NEXT :cursorid USING SQL DESCRIPTOR :descrpid;			}		} else {			if (!strcasecmp(fetch_pos, "NEXT")) {				EXEC SQL FETCH NEXT     :cursorid USING SQL DESCRIPTOR :descrpid;			} else if (!strcasecmp(fetch_pos, "PREVIOUS")) {				EXEC SQL FETCH PREVIOUS :cursorid USING SQL DESCRIPTOR :descrpid;			} else if (!strcasecmp(fetch_pos, "FIRST")) {				EXEC SQL FETCH FIRST    :cursorid USING SQL DESCRIPTOR :descrpid;			} else if (!strcasecmp(fetch_pos, "LAST")) {				EXEC SQL FETCH LAST     :cursorid USING SQL DESCRIPTOR :descrpid;			} else if (!strcasecmp(fetch_pos, "CURRENT")) {				EXEC SQL FETCH CURRENT  :cursorid USING SQL DESCRIPTOR :descrpid;			} else {				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid positioning arg on fetch");			}		}	}  		if (SQLCODE != -451) {		switch (ifx_check()) {			case IFX_ERROR:				IFXG(sv_sqlcode) = SQLCODE;				{					char *ifx_err = ifx_error(ifx);					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can not fetch row on cursor %s (%s)", ifx_err, cursorid);					efree(ifx_err);					RETURN_FALSE;				}				break;			case IFX_NODATA:				RETURN_FALSE;				break;			default:				break;		}	}	Ifx_Result->rowid++;	array_init(return_value);	num_fields = fieldcount;	locind = 0;	for (i = 1; i <= num_fields; i++) {		EXEC SQL GET DESCRIPTOR :descrpid VALUE :i 			:fieldtype = TYPE,			:fieldname = NAME,			:fieldleng = LENGTH,			:indicator = INDICATOR;		if (ifx_check() < 0) {			char *ifx_err = ifx_error(ifx);			IFXG(sv_sqlcode) = SQLCODE;			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Get descriptor (field # %d) fails (%s)", i, ifx_err);			efree(ifx_err);			RETURN_FALSE;		}		p = fieldname;	/* rtrim fieldname */		while ((*p != ' ') && (p < &fieldname[sizeof(fieldname) - 1])) ++p;		*p = 0;		if (strcmp("(expression)", fieldname) == 0)	{ /* stored proc */			sprintf(fieldname, "[Expr_%d]", i);		}				if (indicator == -1) {	/* NULL */			if ((IFXG(textasvarchar) == 0 && fieldtype == SQLTEXT) || 				(IFXG(byteasvarchar) == 0 && fieldtype == SQLBYTES)) {				bid_b = Ifx_Result->res_id[locind];				/* call php_intifx_get_blobloc() to reset locator_b */				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_CC);				continue; 			}			if ((fieldtype == SQLTEXT) || (fieldtype == SQLBYTES)$ifdef HAVE_IFX_IUS;			|| (fieldtype == SQLUDTFIXED)$endif;			) {				/* call php_intifx_get_blobloc() to reset locator_b */				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_CC);			}			add_assoc_string(return_value, fieldname, nullstr, DUP);			continue;		} /* NULL */		switch (fieldtype) {			case SQLSERIAL: 			case SQLINT:				EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int_data = DATA;				long_data = int_data;				sprintf(string_data, "%ld", long_data); 				add_assoc_string(return_value, fieldname, string_data, DUP);				break;			case SQLSMINT:				EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :short_data = DATA;				long_data = short_data;				sprintf(string_data, "%ld", long_data); 				add_assoc_string(return_value, fieldname, string_data, DUP);				break;			case SQLDECIMAL:			case SQLMONEY:				EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dec_data = DATA;				memset(string_data, 0x20, 64);				dectoasc(&dec_data, string_data, 63, -1);				for (p = string_data; *p != ' '; ++p) ;				*p = 0;				add_assoc_string(return_value, fieldname, string_data, DUP);				break;			case SQLSMFLOAT:				EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :float_data = DATA;				double_data = float_data;				sprintf(string_data, "%17.17g", double_data);				add_assoc_string(return_value, fieldname, string_data, DUP);				break;			case SQLFLOAT:				EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :double_data = DATA;				sprintf(string_data, "%17.17g", double_data);				add_assoc_string(return_value, fieldname, string_data, DUP);				break;			case SQLDATE:				EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :date_data = DATA;				rdatestr(date_data, string_data); 				add_assoc_string(return_value, fieldname, string_data, DUP);				break;			case SQLDTIME:				EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :dt_data = DATA;				dttoasc(&dt_data, string_data); 				add_assoc_string(return_value, fieldname, string_data, DUP);				break;			case SQLINTERVAL:				EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :intvl_data = DATA;				intoasc(&intvl_data, string_data); 				add_assoc_string(return_value, fieldname, string_data, DUP);				break;$ifdef HAVE_IFX_IUS;			case SQLSERIAL8:			case SQLINT8:				EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :int8_var = DATA;				memset(string_data, ' ', sizeof(string_data));				ifx_int8toasc(&int8_var, string_data, 200);				p = string_data; /* rtrim string_data */				while ((*p != ' ') && (p < &string_data[sizeof(string_data) - 1])) ++p;				*p = 0;				add_assoc_string(return_value, fieldname, string_data, DUP);				break;			case SQLLVARCHAR:				ifx_var_flag(&lvar_tmp, 1);				EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :lvar_tmp = DATA;				fieldleng = ifx_var_getlen(&lvar_tmp); 				if (fieldleng > 2) { /* fix by Alex Shepherd */ 					fieldleng -= 2; 				}				if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");					RETURN_FALSE;				}				memcpy(char_data, ifx_var_getdata(&lvar_tmp), fieldleng);				ifx_var_dealloc(&lvar_tmp);				add_assoc_stringl(return_value, fieldname, char_data, fieldleng, 0);				break;			case SQLBOOL:$endif;			case SQLVCHAR:			case SQLNVCHAR:			case SQLCHAR:			case SQLNCHAR:				if ((char_data = (char *)emalloc(fieldleng + 1)) == NULL) {					php_error_docref(NULL TSRMLS_CC, E_WARNING, "Out of memory");					RETURN_FALSE;				}				EXEC SQL GET DESCRIPTOR :descrpid VALUE :i :char_data = DATA;				if (IFXG(charasvarchar) != 0 && (fieldtype == SQLCHAR || fieldtype == SQLNCHAR)) {					ldchar(char_data, fieldleng, char_data);				}				add_assoc_string(return_value, fieldname, char_data, DUP);				efree(char_data);				char_data = NULL;				break;$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) TSRMLS_CC);				slocator = php_intifxus_get_slobloc(bid, &EG(regular_list) TSRMLS_CC);				EXEC SQL SET DESCRIPTOR :descrpid VALUE :i DATA = :*slocat

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -