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

📄 php_mssql.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	}	switch(Z_TYPE_PP(field)) {		case IS_STRING: {			int i;			for (i=0; i<result->num_fields; i++) {				if (!strcasecmp(result->fields[i].name, Z_STRVAL_PP(field))) {					field_offset = i;					break;				}			}			if (i>=result->num_fields) { /* no match found */				php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s field not found in result", Z_STRVAL_PP(field));				RETURN_FALSE;			}			break;		}		default:			convert_to_long_ex(field);			field_offset = Z_LVAL_PP(field);			if (field_offset<0 || field_offset>=result->num_fields) {				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad column offset specified");				RETURN_FALSE;			}			break;	}	*return_value = result->data[Z_LVAL_PP(row)][field_offset];	zval_copy_ctor(return_value);}/* }}} *//* {{{ proto bool mssql_next_result(resource result_id)   Move the internal result pointer to the next result */PHP_FUNCTION(mssql_next_result){	zval **mssql_result_index;	int retvalue;	mssql_result *result;	mssql_link *mssql_ptr;	if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_result_index)==FAILURE) {		WRONG_PARAM_COUNT;	}	ZEND_FETCH_RESOURCE(result, mssql_result *, mssql_result_index, -1, "MS SQL-result", le_result);		mssql_ptr = result->mssql_ptr;	retvalue = dbresults(mssql_ptr->link);	while (dbnumcols(mssql_ptr->link) <= 0 && retvalue == SUCCEED) {		retvalue = dbresults(mssql_ptr->link);	}	if (retvalue == FAIL) {		RETURN_FALSE;	}	else if (retvalue == NO_MORE_RESULTS || retvalue == NO_MORE_RPC_RESULTS) {		if (result->statement) {			_mssql_get_sp_result(mssql_ptr, result->statement TSRMLS_CC);		}		RETURN_FALSE;	}	else {		_free_result(result, 1);		result->cur_row=result->num_fields=result->num_rows=0;		dbclrbuf(mssql_ptr->link,DBLASTROW(mssql_ptr->link));		retvalue = dbnextrow(mssql_ptr->link);		result->num_fields = dbnumcols(mssql_ptr->link);		result->fields = (mssql_field *) emalloc(sizeof(mssql_field)*result->num_fields);		result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue TSRMLS_CC);		RETURN_TRUE;	}}/* }}} *//* {{{ proto void mssql_min_error_severity(int severity)   Sets the lower error severity */PHP_FUNCTION(mssql_min_error_severity){	zval **severity;		if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &severity)==FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_long_ex(severity);	MS_SQL_G(min_error_severity) = Z_LVAL_PP(severity);}/* }}} *//* {{{ proto void mssql_min_message_severity(int severity)   Sets the lower message severity */PHP_FUNCTION(mssql_min_message_severity){	zval **severity;		if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &severity)==FAILURE) {		WRONG_PARAM_COUNT;	}	convert_to_long_ex(severity);	MS_SQL_G(min_message_severity) = Z_LVAL_PP(severity);}/* }}} *//* {{{ proto int mssql_init(string sp_name [, resource conn_id])   Initializes a stored procedure or a remote stored procedure  */PHP_FUNCTION(mssql_init){	zval **sp_name, **mssql_link_index;	mssql_link *mssql_ptr;	mssql_statement *statement;	int id;		switch(ZEND_NUM_ARGS()) {		case 1:			if (zend_get_parameters_ex(1, &sp_name)==FAILURE) {				RETURN_FALSE;			}			id = php_mssql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			break;		case 2:			if (zend_get_parameters_ex(2, &sp_name, &mssql_link_index)==FAILURE) {				RETURN_FALSE;			}			id = -1;			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE2(mssql_ptr, mssql_link *, mssql_link_index, id, "MS SQL-Link", le_link, le_plink);		convert_to_string_ex(sp_name);		if (dbrpcinit(mssql_ptr->link, Z_STRVAL_PP(sp_name),0)==FAIL) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to init stored procedure");		RETURN_FALSE;	}	statement=NULL;	statement = ecalloc(1,sizeof(mssql_statement));		if (statement!=NULL) {		statement->link = mssql_ptr;		statement->executed=FALSE;	}	else {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to allocate statement");		RETURN_FALSE;	}	statement->id = zend_list_insert(statement,le_statement);		RETURN_RESOURCE(statement->id);}/* }}} *//* {{{ proto bool mssql_bind(resource stmt, string param_name, mixed var, int type 		[, int is_output[, int is_null[, int maxlen]]])   Adds a parameter to a stored procedure or a remote stored procedure  */PHP_FUNCTION(mssql_bind){	int	type, is_output, is_null, datalen, maxlen = -1;	zval **stmt, **param_name, **var, **yytype;	mssql_link *mssql_ptr;	mssql_statement *statement;	mssql_bind bind,*bindp;	int status = 0;	LPBYTE value = NULL;	/* BEGIN input validation */	switch(ZEND_NUM_ARGS()) {		case 4: 			if (zend_get_parameters_ex(4, &stmt, &param_name, &var, &yytype)==FAILURE) {				RETURN_FALSE;			}			convert_to_long_ex(yytype);			type=Z_LVAL_PP(yytype);			is_null=FALSE;			is_output=FALSE;			break;								case 5: {			zval **yyis_output;				if (zend_get_parameters_ex(5, &stmt, &param_name, &var, &yytype, &yyis_output)==FAILURE) {					RETURN_FALSE;				}				convert_to_long_ex(yytype);				convert_to_long_ex(yyis_output);				type=Z_LVAL_PP(yytype);				is_null=FALSE;				is_output=Z_LVAL_PP(yyis_output);			}			break;			case 6: {				zval **yyis_output, **yyis_null;				if (zend_get_parameters_ex(6, &stmt, &param_name, &var, &yytype, &yyis_output, &yyis_null)==FAILURE) {					RETURN_FALSE;				}				convert_to_long_ex(yytype);				convert_to_long_ex(yyis_output);				convert_to_long_ex(yyis_null);				type=Z_LVAL_PP(yytype);				is_output=Z_LVAL_PP(yyis_output);				is_null=Z_LVAL_PP(yyis_null);			}			break;				case 7: {				zval **yyis_output, **yyis_null, **yymaxlen;				if (zend_get_parameters_ex(7, &stmt, &param_name, &var, &yytype, &yyis_output, &yyis_null, &yymaxlen)==FAILURE) {					RETURN_FALSE;				}				convert_to_long_ex(yytype);				convert_to_long_ex(yyis_output);				convert_to_long_ex(yyis_null);				convert_to_long_ex(yymaxlen);				type=Z_LVAL_PP(yytype);				is_output=Z_LVAL_PP(yyis_output);				is_null=Z_LVAL_PP(yyis_null);				if (is_output) {					maxlen=Z_LVAL_PP(yymaxlen);				}			}			break;					default:			WRONG_PARAM_COUNT;			break;	}	/* END input validation */		ZEND_FETCH_RESOURCE(statement, mssql_statement *, stmt, -1, "MS SQL-Statement", le_statement);	if (statement==NULL) {		RETURN_FALSE;	}	mssql_ptr=statement->link;	/* modify datalen and maxlen according to dbrpcparam documentation */	if ( (type==SQLVARCHAR) || (type==SQLCHAR) || (type==SQLTEXT) )	{	/* variable-length type */		if (is_null) {			maxlen=0;			datalen=0;		}		else {			convert_to_string_ex(var);			datalen=Z_STRLEN_PP(var);			value=(LPBYTE)Z_STRVAL_PP(var);		}	}	else	{	/* fixed-length type */		if (is_null)	{			datalen=0;		}		else {			datalen=-1;		}		maxlen=-1;		switch (type)	{			case SQLFLT4:			case SQLFLT8:			case SQLFLTN:				convert_to_double_ex(var);				value=(LPBYTE)(&Z_DVAL_PP(var));				break;			case SQLBIT:			case SQLINT1:			case SQLINT2:			case SQLINT4:				convert_to_long_ex(var);				value=(LPBYTE)(&Z_LVAL_PP(var));				break;			default:				php_error_docref(NULL TSRMLS_CC, E_WARNING, "unsupported type");				RETURN_FALSE;				break;		}	}	convert_to_string_ex(param_name);		if (is_output) {		status=DBRPCRETURN;	}		/* hashtable of binds */	if (! statement->binds) {		ALLOC_HASHTABLE(statement->binds);		zend_hash_init(statement->binds, 13, NULL, _mssql_bind_hash_dtor, 0);	}	if (zend_hash_exists(statement->binds, Z_STRVAL_PP(param_name), Z_STRLEN_PP(param_name))) {		RETURN_FALSE;	}	else {		memset((void*)&bind,0,sizeof(mssql_bind));		zend_hash_add(statement->binds, Z_STRVAL_PP(param_name), Z_STRLEN_PP(param_name), &bind, sizeof(mssql_bind), (void **)&bindp);		if( NULL == bindp ) RETURN_FALSE;		bindp->zval=*var;		zval_add_ref(var);			/* no call to dbrpcparam if RETVAL */		if ( strcmp("RETVAL",Z_STRVAL_PP(param_name))!=0 ) {									if (dbrpcparam(mssql_ptr->link, Z_STRVAL_PP(param_name), (BYTE)status, type, maxlen, datalen, (LPBYTE)value)==FAIL) {				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set parameter");				RETURN_FALSE;			}		}	}	RETURN_TRUE;}/* }}} *//* {{{ proto mixed mssql_execute(resource stmt [, bool skip_results = false])   Executes a stored procedure on a MS-SQL server database */PHP_FUNCTION(mssql_execute){	zval **stmt, **skip;	zend_bool skip_results = 0;	int retvalue, retval_results;	mssql_link *mssql_ptr;	mssql_statement *statement;	mssql_result *result;	int num_fields;	int batchsize;	int ac = ZEND_NUM_ARGS();	batchsize = MS_SQL_G(batchsize);	if (ac < 1 || ac > 2 || zend_get_parameters_ex(ac, &stmt, &skip)==FAILURE) {        WRONG_PARAM_COUNT;    }	if (ac == 2) {		skip_results = Z_BVAL_PP(skip);	}	ZEND_FETCH_RESOURCE(statement, mssql_statement *, stmt, -1, "MS SQL-Statement", le_statement);	mssql_ptr=statement->link;	if (dbrpcexec(mssql_ptr->link)==FAIL || dbsqlok(mssql_ptr->link)==FAIL) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "stored procedure execution failed");		dbcancel(mssql_ptr->link);		RETURN_FALSE;	}	retval_results=dbresults(mssql_ptr->link);	if (retval_results==FAIL) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "could not retrieve results");		dbcancel(mssql_ptr->link);		RETURN_FALSE;	}	/* The following is just like mssql_query, fetch all rows from the first result 	 *	set into the row buffer.  	 */	result=NULL;	if (retval_results == SUCCEED) {		if (skip_results) {			do {				dbcanquery(mssql_ptr->link);				retval_results = dbresults(mssql_ptr->link);			} while (retval_results == SUCCEED);		}		else {			/* Skip results not returning any columns */			while ((num_fields = dbnumcols(mssql_ptr->link)) <= 0 && retval_results == SUCCEED) {				retval_results = dbresults(mssql_ptr->link);			}			if ((num_fields = dbnumcols(mssql_ptr->link)) > 0) {				retvalue = dbnextrow(mssql_ptr->link);				result = (mssql_result *) emalloc(sizeof(mssql_result));				result->batchsize = batchsize;				result->blocks_initialized = 1;				result->data = (zval **) emalloc(sizeof(zval *)*MSSQL_ROWS_BLOCK);				result->mssql_ptr = mssql_ptr;				result->cur_field=result->cur_row=result->num_rows=0;				result->num_fields = num_fields;				result->fields = (mssql_field *) emalloc(sizeof(mssql_field)*num_fields);				result->statement = statement;				result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue TSRMLS_CC);			}		}	}	if (retval_results == NO_MORE_RESULTS || retval_results == NO_MORE_RPC_RESULTS) {		_mssql_get_sp_result(mssql_ptr, statement TSRMLS_CC);	}		if (result==NULL) {		RETURN_TRUE;	/* no recordset returned ...*/	}	else {		ZEND_REGISTER_RESOURCE(return_value, result, le_result);	}}/* }}} *//* {{{ proto bool mssql_free_statement(resource result_index)   Free a MS-SQL statement index */PHP_FUNCTION(mssql_free_statement){	zval **mssql_statement_index;	mssql_statement *statement;	int retvalue;		if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &mssql_statement_index)==FAILURE) {		WRONG_PARAM_COUNT;	}		if (Z_TYPE_PP(mssql_statement_index)==IS_RESOURCE && Z_LVAL_PP(mssql_statement_index)==0) {		RETURN_FALSE;	}	ZEND_FETCH_RESOURCE(statement, mssql_statement *, mssql_statement_index, -1, "MS SQL-statement", le_statement);		/* Release remaining results */	do {		dbcanquery(statement->link->link);		retvalue = dbresults(statement->link->link);	} while (retvalue == SUCCEED);	zend_list_delete(Z_RESVAL_PP(mssql_statement_index));	RETURN_TRUE;}/* }}} *//* {{{ proto string mssql_guid_string(string binary [,int short_format])   Converts a 16 byte binary GUID to a string  */PHP_FUNCTION(mssql_guid_string){	zval **binary, **short_format;	int sf = 0;	char buffer[32+1];	char buffer2[36+1];		switch(ZEND_NUM_ARGS()) {		case 1:			if (zend_get_parameters_ex(1, &binary)

⌨️ 快捷键说明

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