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

📄 php_fbsql.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
		result = 0;	}	else if (fbcmdWarningsFound(md))	{		FBCErrorMetaData* emd = fbcdcErrorMetaData(c, md);		char*             emg = fbcemdAllErrorMessages(emd);		if (FB_SQL_G(generateWarnings))		{			if (emg)				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Warning in statement: '%s' %s", sql, emg);			else				php_error_docref(NULL TSRMLS_CC, E_WARNING, "No message");		}		link->errorText = strdup(emg);		link->errorNo = fbcemdErrorCodeAtIndex(emd, 0);		free(emg);		fbcemdRelease(emd);		result = 1;	}	return result;}/* }}} */static void phpfbQuery(INTERNAL_FUNCTION_PARAMETERS, char* sql, PHPFBLink* link){	PHPFBResult* result = NULL;	FBCMetaData*   md, *meta;	char*          tp;	char*          fh; 	unsigned int   sR = 1, cR = 0;	meta     = fbcdcExecuteDirectSQL(link->connection, sql);	if (!mdOk(link, meta, sql))	{		fbcmdRelease(meta);		ZVAL_BOOL(return_value, 0)	}	else {		if (fbcmdHasMetaDataArray(meta)) {			sR = fbcmdMetaDataArrayCount(meta);			md = (FBCMetaData*)fbcmdMetaDataAtIndex(meta, cR);		}		else			md = meta;		tp = fbcmdStatementType(md);		if (tp == NULL) {			fbcmdRelease(meta);			ZVAL_BOOL(return_value, 1)		}		else if ((tp[0] == 'C') || (tp[0] == 'R'))			{			if (sR == 1 && md) fbcmdRelease(md);			ZVAL_BOOL(return_value, 1)		}		else if ((fh = fbcmdFetchHandle(md)) || tp[0] == 'E' || (tp[0] == 'U' && fh))		{			result = emalloc(sizeof(PHPFBResult));			result->link        = link;			result->fetchHandle = fh;			result->ResultmetaData    = meta;			result->metaData    = md;			result->rowHandler  = NULL;			result->batchSize   = FB_SQL_G(batchSize);			result->rowCount    = 0x7fffffff;			result->columnCount = 0;			result->rowIndex    = 0;			result->columnIndex = 0;			result->row         = NULL;			result->array       = NULL;			result->list        = NULL;			result->selectResults = sR;			result->currentResult = cR;			result->lobMode		= FBSQL_LOB_DIRECT;			if (tp[0] != 'E')			{				result->columnCount = fbcmdColumnCount(md);				result->fetchHandle = fh;				result->batchSize   = FB_SQL_G(batchSize);			}			else 			{				char* r = fbcmdMessage(result->metaData);				fbcrhConvertToOutputCharSet(fbcdcOutputCharacterSet(link->connection), (unsigned char *)r);				if ((result->list = fbcplParse(r)))				{					result->rowCount = fbcplCount(result->list);					result->columnCount = 7;				}			}			ZEND_REGISTER_RESOURCE(return_value, result, le_result);		}		else if (tp[0] == 'I' || tp[0] == 'U')		{			if (tp[0] == 'I') link->insert_id = fbcmdRowIndex(md);			if (sR == 1 && md) fbcmdRelease(md);			ZVAL_BOOL(return_value, 1)		}		else if(tp[0] == 'A' || tp[0] == 'D') 		{			if (sR == 1 && md) fbcmdRelease(md);			ZVAL_BOOL(return_value, 1)		}		if (link) link->affectedRows = fbcmdRowCount(md);	}}/* {{{ proto resource fbsql_query(string query [, resource link_identifier])   Send one or more SQL statements to the server and execute them */PHP_FUNCTION(fbsql_query){	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL, **query;	int id;	switch (ZEND_NUM_ARGS()) {		case 1:			id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			if (zend_get_parameters_ex(1, &query)==FAILURE) {				RETURN_FALSE;			}			break;		case 2:			if (zend_get_parameters_ex(2, &query, &fbsql_link_index)==FAILURE) {				RETURN_FALSE;			}			id = -1;			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);	convert_to_string_ex(query);	phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink);}/* }}} *//* {{{ proto resource fbsql_db_query(string database_name, string query [, resource link_identifier])   Send one or more SQL statements to a specified database on the server */PHP_FUNCTION(fbsql_db_query){	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL, **dbname, **query;	int id;	switch (ZEND_NUM_ARGS()) {		case 2:			id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			if (zend_get_parameters_ex(2, &dbname, &query)==FAILURE) {				RETURN_FALSE;			}			break;		case 3:			if (zend_get_parameters_ex(3, &dbname, &query, &fbsql_link_index)==FAILURE) {				RETURN_FALSE;			}			id = -1;			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);	convert_to_string_ex(query);	convert_to_string_ex(dbname);	if (php_fbsql_select_db(Z_STRVAL_PP(dbname), phpLink TSRMLS_CC)) {		phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, Z_STRVAL_PP(query), phpLink);	} else {		RETURN_FALSE;	}}/* }}} *//* {{{ proto resource fbsql_list_dbs([resource link_identifier])   Retreive a list of all databases on the server */PHP_FUNCTION(fbsql_list_dbs){	PHPFBResult* phpResult;	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL;	int id;	switch (ZEND_NUM_ARGS()) {		case 0:			id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			break;		case 1:			if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {				RETURN_FALSE;			}			id = -1;			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);	if (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128);	phpResult = emalloc(sizeof(PHPFBResult));	phpResult->link        = phpLink;	phpResult->fetchHandle = NULL;	phpResult->rowHandler  = NULL;	phpResult->ResultmetaData    = NULL;	phpResult->metaData    = NULL;	phpResult->batchSize   = FB_SQL_G(batchSize);	phpResult->columnCount = 1;	phpResult->rowIndex    = 0;	phpResult->columnIndex = 0;	phpResult->row         = NULL;	phpResult->array       = fbcehAvailableDatabases(phpLink->execHandler);	phpResult->rowCount    = fbaCount(phpResult->array);	phpResult->list        = NULL;	ZEND_REGISTER_RESOURCE(return_value, phpResult, le_result);}/* }}} *//* {{{ proto resource fbsql_list_tables(string database [, int link_identifier])   Retreive a list of all tables from the specifoied database */PHP_FUNCTION(fbsql_list_tables){	char* sql = "select t0.\"table_name\"from information_schema.tables t0, information_schema.SCHEMATA t1 where t0.schema_pk = t1.schema_pk and t1.\"schema_name\" = current_schema order by \"table_name\";";	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL, **database_name;	int id;	char *databaseName;	switch (ZEND_NUM_ARGS()) {		case 1:			id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			if (zend_get_parameters_ex(1, &database_name)==FAILURE) {				RETURN_FALSE;			}			break;		case 2:			if (zend_get_parameters_ex(2, &database_name, &fbsql_link_index)==FAILURE) {				RETURN_FALSE;			}			id = -1;			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);	convert_to_string_ex(database_name);	databaseName = Z_STRVAL_PP(database_name);	if (databaseName == NULL) {		php_fbsql_select_db(FB_SQL_G(databaseName), phpLink TSRMLS_CC);	} else {		php_fbsql_select_db(databaseName, phpLink TSRMLS_CC);	}	phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink);}/* }}} *//* {{{ proto resource fbsql_list_fields(string database_name, string table_name [, resource link_identifier])   Retrieve a list of all fields for the specified database.table */PHP_FUNCTION(fbsql_list_fields){	PHPFBLink* phpLink = NULL;	zval **fbsql_link_index = NULL, **database_name, **table_name;	int id;	char *databaseName, *tableName;	char sql[1024];	switch (ZEND_NUM_ARGS()) {		case 2:			id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			if (zend_get_parameters_ex(2, &database_name, &table_name)==FAILURE) {				RETURN_FALSE;			}			break;		case 3:			if (zend_get_parameters_ex(3, &database_name, &table_name, &fbsql_link_index)==FAILURE) {				RETURN_FALSE;			}			id = -1;			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);	convert_to_string_ex(database_name);	databaseName = Z_STRVAL_PP(database_name);	convert_to_string_ex(table_name);	tableName = Z_STRVAL_PP(table_name);	if (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) {		RETURN_FALSE;	}	if (snprintf(sql, sizeof(sql), "SELECT * FROM %s WHERE 1=0;", tableName) < 0) {		RETURN_FALSE;	}	phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, sql, phpLink);}/* }}} *//* {{{ proto string fbsql_error([resource link_identifier])   Returns the last error string */PHP_FUNCTION(fbsql_error){	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL;	int id;	switch (ZEND_NUM_ARGS()) {		case 0:			id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			break;		case 1:			if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {				RETURN_FALSE;			}			id = -1;			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);	if (phpLink->errorText == NULL) {		RETURN_FALSE;	}	else {		RETURN_STRING(phpLink->errorText, 1);	}}/* }}} *//* {{{ proto int fbsql_errno([resource link_identifier])   Returns the last error code */PHP_FUNCTION(fbsql_errno){	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL;	int id;	switch (ZEND_NUM_ARGS()) {		case 0:			id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			break;		case 1:			if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {				RETURN_FALSE;			}			id = -1;			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);	RETURN_LONG(phpLink->errorNo);}/* }}} *//* {{{ proto bool fbsql_warnings([int flag])   Enable or disable FrontBase warnings */PHP_FUNCTION(fbsql_warnings){	int argc = ARG_COUNT(ht);	zval **argv[1];	if ((argc < 0) || (argc > 1)) WRONG_PARAM_COUNT;	if (zend_get_parameters_ex(argc, &argv[0])==FAILURE) RETURN_FALSE;	if (argc >= 1)	{		convert_to_long_ex(argv[0]);		FB_SQL_G(generateWarnings) = Z_LVAL_PP(argv[0]) != 0;	}	RETURN_BOOL(FB_SQL_G(generateWarnings));}/* }}} *//* {{{ proto int fbsql_affected_rows([resource link_identifier])   Get the number of rows affected by the last statement */PHP_FUNCTION(fbsql_affected_rows){	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL;	int id;	switch (ZEND_NUM_ARGS()) {		case 0:			id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			break;		case 1:			if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {				RETURN_FALSE;			}			id = -1;			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);	RETURN_LONG(phpLink->affectedRows);}/* }}} *//* {{{ proto int fbsql_insert_id([resource link_identifier])   Get the internal index for the last insert statement */PHP_FUNCTION(fbsql_insert_id){	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL;	int id;	switch (ZEND_NUM_ARGS()) {		case 0:			id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			break;		case 1:			if (zend_get_parameters_ex(1, &fbsql_link_index)==FAILURE) {				RETURN_FALSE;			}			id = -1;			break;		default:			WRONG_PAR

⌨️ 快捷键说明

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