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

📄 mssql.c

📁 又一款WEB游戏原代码Bk_Sources_RPG?忠豢頦EB游戏原代码Bk_Sources_RPG
💻 C
📖 第 1 页 / 共 3 页
字号:
			sprintf(buffer, "%li", msSQL_GLOBAL(textlimit));			if (dbsetopt(mssql.link, DBTEXTLIMIT, buffer FREETDS_OPTION)==FAIL) {				efree(hashed_details);				dbfreelogin(mssql.login);				RETURN_FALSE;			}		}		if (msSQL_GLOBAL(textsize) != -1) {			sprintf(buffer, "SET TEXTSIZE %li", msSQL_GLOBAL(textsize));			dbcmd(mssql.link, buffer);			dbsqlexec(mssql.link);			dbresults(mssql.link);//			if (dbsetopt(mssql.link, DBTEXTSIZE, buffer)==FAIL) {//				efree(hashed_details);//				dbfreelogin(mssql.login);//				RETURN_FALSE;//			}			}		/* add it to the list */		mssql_ptr = (mssql_link *) emalloc(sizeof(mssql_link));		memcpy(mssql_ptr,&mssql,sizeof(mssql_link));		return_value->value.lval = php3_list_insert(mssql_ptr,msSQL_GLOBAL(le_link));				/* add it to the hash */		new_index_ptr.ptr = (void *) return_value->value.lval;		new_index_ptr.type = le_index_ptr;		if (_php3_hash_update(list,hashed_details,hashed_details_length+1,(void *) &new_index_ptr, sizeof(list_entry),NULL)==FAILURE) {			efree(hashed_details);			RETURN_FALSE;		}		msSQL_GLOBAL(num_links++);	}	efree(hashed_details);	msSQL_GLOBAL(default_link)=return_value->value.lval;}static int php3_mssql_get_default_link(INTERNAL_FUNCTION_PARAMETERS){	msSQL_TLS_VARS;	if (msSQL_GLOBAL(default_link)==-1) { /* no link opened yet, implicitly open one */		HashTable dummy;		_php3_hash_init(&dummy,0,NULL,NULL,0);		php3_mssql_do_connect(&dummy,return_value,list,plist,0);		_php3_hash_destroy(&dummy);	}	return msSQL_GLOBAL(default_link);}/* {{{ proto int mssql_connect([string host [, string user [, string password]]])   Open MS-SQL server connection */void php3_mssql_connect(INTERNAL_FUNCTION_PARAMETERS){	php3_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,0);}/* }}} *//* {{{ proto int mssql_pconnect([string host [, string user [, string password]]])   Open permanent MS-SQL server connection */void php3_mssql_pconnect(INTERNAL_FUNCTION_PARAMETERS){	php3_mssql_do_connect(INTERNAL_FUNCTION_PARAM_PASSTHRU,1);}/* }}} *//* {{{ proto bool mssql_close([int link_id])   Close MS-SQL connection */void php3_mssql_close(INTERNAL_FUNCTION_PARAMETERS){	pval *mssql_link_index;	int id,type;	msSQL_TLS_VARS;		switch (ARG_COUNT(ht)) {		case 0:			id = msSQL_GLOBAL(default_link);			break;		case 1:			if (getParameters(ht, 1, &mssql_link_index)==FAILURE) {				RETURN_FALSE;			}			convert_to_long(mssql_link_index);			id = mssql_link_index->value.lval;			break;		default:			WRONG_PARAM_COUNT;			break;	}		php3_list_find(id,&type);	if (type!=msSQL_GLOBAL(le_link) && type!=msSQL_GLOBAL(le_plink)) {		php3_error(E_WARNING,"%d is not a MS SQL link index",id);		RETURN_FALSE;	}		php3_list_delete(id);	RETURN_TRUE;}/* }}} *//* {{{ proto bool mssql_select_db(string database [, int link_id])   Select MS-SQL database */void php3_mssql_select_db(INTERNAL_FUNCTION_PARAMETERS){	pval *db,*mssql_link_index;	int id,type;	mssql_link  *mssql_ptr;	msSQL_TLS_VARS;		switch(ARG_COUNT(ht)) {		case 1:			if (getParameters(ht, 1, &db)==FAILURE) {				RETURN_FALSE;			}			id = php3_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			break;		case 2:			if (getParameters(ht, 2, &db, &mssql_link_index)==FAILURE) {				RETURN_FALSE;			}			convert_to_long(mssql_link_index);			id = mssql_link_index->value.lval;			break;		default:			WRONG_PARAM_COUNT;			break;	}		CHECK_LINK(id);		mssql_ptr = (mssql_link *) php3_list_find(id,&type);	if (type!=msSQL_GLOBAL(le_link) && type!=msSQL_GLOBAL(le_plink)) {		php3_error(E_WARNING,"%d is not a MS SQL link index",id);		RETURN_FALSE;	}		convert_to_string(db);		if (dbuse(mssql_ptr->link,db->value.str.val)==FAIL) {		/*php3_error(E_WARNING,"MS SQL:  Unable to select database:  %s",mssql_error(mssql));*/		RETURN_FALSE;	} else {		RETURN_TRUE;	}}/* }}} */static void php3_mssql_get_column_content_with_type(mssql_link *mssql_ptr,int offset,pval *result, int column_type){	if (dbdatlen(mssql_ptr->link,offset) == 0) {		var_reset(result);		return;	}	switch (column_type)	{		case SQLINT1:		case SQLINT2:		case SQLINT4:		case SQLINTN: {				result->value.lval = (long) anyintcol(offset);			result->type = IS_LONG;			break;		}		case SQLCHAR:		case SQLVARCHAR:		case SQLTEXT: {			int length;			char *data = charcol(offset);			length=dbdatlen(mssql_ptr->link,offset);			while (length>0 && charcol(offset)[length-1] == ' ') { /* nuke trailing whitespace */				length--;			}			result->value.str.val = estrndup(data,length);			result->value.str.len = length;			result->type = IS_STRING;			break;		}		case SQLFLT8: {			result->value.dval = (double) floatcol(offset);			result->type = IS_DOUBLE;			break;		}		case SQLNUMERIC:		default: {			if (dbwillconvert(coltype(offset),SQLCHAR)) {				char *res_buf;				int res_length = dbdatlen(mssql_ptr->link,offset);							res_buf = (char *) emalloc(res_length+1);				memset(res_buf, 0, res_length+1);				dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length,SQLCHAR,res_buf,-1);						result->value.str.len = res_length;				result->value.str.val = res_buf;				result->type = IS_STRING;			} else {				php3_error(E_WARNING,"MS SQL:  column %d has unknown data type (%d)", offset, coltype(offset));				var_reset(result);			}		}	}}static void php3_mssql_get_column_content_without_type(mssql_link *mssql_ptr,int offset,pval *result, int column_type){	if (dbdatlen(mssql_ptr->link,offset) == 0) {		var_reset(result);		return;	}	if (dbwillconvert(coltype(offset),SQLCHAR)) {		unsigned char *res_buf;		int res_length = dbdatlen(mssql_ptr->link,offset);				res_buf = (unsigned char *) emalloc(res_length+1 + 19);		memset(res_buf, 0, res_length+1 + 10);		dbconvert(NULL,coltype(offset),dbdata(mssql_ptr->link,offset), res_length, SQLCHAR,res_buf,-1);				result->value.str.len = strlen(res_buf);		result->value.str.val = res_buf;		result->type = IS_STRING;	} else {		php3_error(E_WARNING,"MS SQL:  column %d has unknown data type (%d)", offset, coltype(offset));		var_reset(result);	}}/* {{{ proto int mssql_query(string query [, int link_id])   Send MS-SQL query */void php3_mssql_query(INTERNAL_FUNCTION_PARAMETERS){	pval *query,*mssql_link_index;	int id,type,retvalue;	mssql_link *mssql_ptr;	mssql_result *result;	int num_fields;	int blocks_initialized=1;	int i,j;	int *column_types;	msSQL_TLS_VARS;	switch(ARG_COUNT(ht)) {		case 1:			if (getParameters(ht, 1, &query)==FAILURE) {				RETURN_FALSE;			}			id = msSQL_GLOBAL(default_link);			break;		case 2:			if (getParameters(ht, 2, &query, &mssql_link_index)==FAILURE) {				RETURN_FALSE;			}			convert_to_long(mssql_link_index);			id = mssql_link_index->value.lval;			break;		default:			WRONG_PARAM_COUNT;			break;	}		mssql_ptr = (mssql_link *) php3_list_find(id,&type);	if (type!=msSQL_GLOBAL(le_link) && type!=msSQL_GLOBAL(le_plink)) {		php3_error(E_WARNING,"%d is not a MS SQL link index",id);		RETURN_FALSE;	}		convert_to_string(query);		if (dbcmd(mssql_ptr->link,query->value.str.val)==FAIL) {		php3_error(E_WARNING,"MS SQL:  Unable to set query");		RETURN_FALSE;	}	if (dbsqlexec(mssql_ptr->link)==FAIL || dbresults(mssql_ptr->link)==FAIL) {		php3_error(E_WARNING,"MS SQL:  Query failed");		RETURN_FALSE;	}		/* The following is more or less the equivalent of mysql_store_result().	 * fetch all rows from the server into the row buffer, thus:	 * 1)  Being able to fire up another query without explicitly reading all rows	 * 2)  Having numrows accessible	 */	retvalue=dbnextrow(mssql_ptr->link);		if (retvalue==FAIL) {		RETURN_FALSE;	}	num_fields = dbnumcols(mssql_ptr->link);	if (num_fields<=0) {		RETURN_TRUE;	}		column_types = (int *) emalloc(sizeof(int) * num_fields);	for (i=0; i<num_fields; i++) {		column_types[i] = coltype(i+1);	}		result = (mssql_result *) emalloc(sizeof(mssql_result));	result->data = (pval **) emalloc(sizeof(pval *)*MSSQL_ROWS_BLOCK);	result->mssql_ptr = mssql_ptr;	result->cur_field=result->cur_row=result->num_rows=0;	result->num_fields = num_fields;	i=0;	while (retvalue!=FAIL && retvalue!=NO_MORE_ROWS) {		result->num_rows++;		if (result->num_rows > blocks_initialized*MSSQL_ROWS_BLOCK) {			result->data = (pval **) erealloc(result->data,sizeof(pval *)*MSSQL_ROWS_BLOCK*(++blocks_initialized));		}		result->data[i] = (pval *) emalloc(sizeof(pval)*num_fields);		for (j=1; j<=num_fields; j++) {			msSQL_GLOBAL(get_column_content(mssql_ptr, j, &result->data[i][j-1], column_types[j-1]));		}		retvalue=dbnextrow(mssql_ptr->link);		dbclrbuf(mssql_ptr->link,DBLASTROW(mssql_ptr->link)-1); 		i++;	}	result->num_rows = DBCOUNT(mssql_ptr->link);		result->fields = (mssql_field *) emalloc(sizeof(mssql_field)*num_fields);	j=0;	for (i=0; i<num_fields; i++) {		char *fname = (char *)dbcolname(mssql_ptr->link,i+1);		char computed_buf[16];				if (*fname) {			result->fields[i].name = estrdup(fname);		} else {			if (j>0) {				snprintf(computed_buf,16,"computed%d",j);			} else {				strcpy(computed_buf,"computed");			}			result->fields[i].name = estrdup(computed_buf);			j++;		}		result->fields[i].max_length = dbcollen(mssql_ptr->link,i+1);		result->fields[i].column_source = estrdup(dbcolsource(mssql_ptr->link,i+1));		if (!result->fields[i].column_source) {			result->fields[i].column_source = empty_string;		}		result->fields[i].type = column_types[i];		/* set numeric flag */		switch (column_types[i]) {			case SQLINT1:			case SQLINT2:			case SQLINT4:			case SQLFLT8:			case SQLNUMERIC:			case SQLDECIMAL:				result->fields[i].numeric = 1;				break;			case SQLCHAR:			case SQLVARCHAR:			case SQLTEXT:			default:				result->fields[i].numeric = 0;				break;		}	}	efree(column_types);	return_value->value.lval = php3_list_insert(result,msSQL_GLOBAL(le_result));	return_value->type = IS_LONG;}/* }}} */                        /* {{{ proto bool mssql_free_result(int result)   Free result memory */void php3_mssql_free_result(INTERNAL_FUNCTION_PARAMETERS){	pval *mssql_result_index;	mssql_result *result;	int type;	msSQL_TLS_VARS;		if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &mssql_result_index)==FAILURE) {		WRONG_PARAM_COUNT;	}		convert_to_long(mssql_result_index);	if (mssql_result_index->value.lval==0) {		RETURN_FALSE;	}	result = (mssql_result *) php3_list_find(mssql_result_index->value.lval,&type);		if (type!=msSQL_GLOBAL(le_result)) {//		php3_error(E_WARNING,"%d is not a MS SQL result index",mssql_result_index->value.lval);		RETURN_FALSE;	}	php3_list_delete(mssql_result_index->value.lval);	RETURN_TRUE;}/* }}} *//* {{{ proto string mssql_get_last_message(void)   Returns the last message from server (over min_message_severity?) */void php3_mssql_get_last_message(INTERNAL_FUNCTION_PARAMETERS){	msSQL_TLS_VARS;	RETURN_STRING(msSQL_GLOBAL(server_message),1);}/* }}} *//* {{{ proto int mssql_num_rows(int result)   Get number of rows in result */void php3_mssql_num_rows(INTERNAL_FUNCTION_PARAMETERS){	pval *result_index;	int type,id;	mssql_result *result;	msSQL_TLS_VARS;		if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &result_index)==FAILURE) {		WRONG_PARAM_COUNT;	}		convert_to_long(result_index);	id = result_index->value.lval;		result = (mssql_result *) php3_list_find(id,&type);	if (type!=msSQL_GLOBAL(le_result)) {		php3_error(E_WARNING,"%d is not a MS SQL result index",id);		RETURN_FALSE;	}			return_value->value.lval = result->num_rows;	return_value->type = IS_LONG;}/* }}} *//* {{{ proto int mssql_num_fields(int result)   Get number of fields in result */void php3_mssql_num_fields(INTERNAL_FUNCTION_PARAMETERS){	pval *result_index;	int type,id;	mssql_result *result;	msSQL_TLS_VARS;		if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &result_index)==FAILURE) {		WRONG_PARAM_COUNT;	}		convert_to_long(result_index);	id = result_index->value.lval;		result = (mssql_result *) php3_list_find(id,&type);	if (type!=msSQL_GLOBAL(le_result)) {		php3_error(E_WARNING,"%d is not a MS SQL result index",id);		RETURN_FALSE;	}			return_value->value.lval = result->num_fields;	return_value->type = IS_LONG;}/* }}} *//* {{{ proto array mssql_fetch_row(int result)   Get row as enumerated array */void php3_mssql_fetch_row(INTERNAL_FUNCTION_PARAMETERS){	pval *mssql_result_index;	int type,i,id;	mssql_result *result;	pval field_content;	msSQL_TLS_VARS;	if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &mssql_result_index)==FAILURE) {		WRONG_PARAM_COUNT;	}		convert_to_long(mssql_result_index);	id = mssql_result_index->value.lval;		result = (mssql_result *) php3_list_find(id,&type);	if (type!=msSQL_GLOBAL(le_result)) {		php3_error(E_WARNING,"%d is not a MS SQL result index",id);		RETURN_FALSE;	}		if (result->cur_row >= result->num_rows) {		RETURN_FALSE;	}		array_init(return_value);	for (i=0; i<result->num_fields; i++) {		field_content = result->data[result->cur_row][i];		pval_copy_constructor(&field_content);		_php3_hash_index_update(return_value->value.ht, i, (void *) &field_content, sizeof(pval), NULL);	}	result->cur_row++;}/* }}} */static void php3_mssql_fetch_hash(INTERNAL_FUNCTION_PARAMETERS){	pval *mssql_result_index;	mssql_result *result;	int type;	int i;	pval *pvalue_ptr,tmp;	msSQL_TLS_VARS;		if (ARG_COUNT(ht)!=1 || getParameters(ht, 1, &mssql_result_index)==FAILURE) {		WRONG_PARAM_COUNT;	}	

⌨️ 快捷键说明

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