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

📄 php_fbsql.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
				RETURN_FALSE;			}			convert_to_string_ex(dbname);			name = Z_STRVAL_PP(dbname);			break;		case 2:			if (zend_get_parameters_ex(2, &dbname, &fbsql_link_index)==FAILURE) {				RETURN_FALSE;			}			convert_to_string_ex(dbname);			name = Z_STRVAL_PP(dbname);			id = -1;			break;		default:			WRONG_PARAM_COUNT;			break;	}	ZEND_FETCH_RESOURCE2(phpLink, PHPFBLink *, fbsql_link_index, id, "FrontBase-Link", le_link, le_plink);	if (!php_fbsql_select_db(name, phpLink TSRMLS_CC)) {		RETURN_FALSE;	}	RETURN_TRUE;}/* }}} *//* {{{ proto int fbsql_change_user(string user, string password [, string database [, resource link_identifier]])   Change the user for a session */PHP_FUNCTION(fbsql_change_user){	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL, **user, **password, **database;	int id;	char *name = NULL, *userName, *userPassword;	char buffer[1024];	switch (ZEND_NUM_ARGS()) {		case 2:			name = FB_SQL_G(databaseName);			id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			if (zend_get_parameters_ex(2, &user, &password)==FAILURE) {				RETURN_FALSE;			}			break;		case 3:			id = php_fbsql_get_default_link(INTERNAL_FUNCTION_PARAM_PASSTHRU);			CHECK_LINK(id);			if (zend_get_parameters_ex(3, &user, &password, &database)==FAILURE) {				RETURN_FALSE;			}			convert_to_string_ex(database);			name = Z_STRVAL_PP(database);			break;		case 4:			if (zend_get_parameters_ex(4, &user, &password, &database, &fbsql_link_index)==FAILURE) {				RETURN_FALSE;			}			convert_to_string_ex(database);			name = Z_STRVAL_PP(database);			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(user);	userName = Z_STRVAL_PP(user);	convert_to_string_ex(password);	userPassword = Z_STRVAL_PP(password);	if (snprintf(buffer, sizeof(buffer), "SET AUTHORIZATION %s;", userName) < 0) {		RETURN_FALSE;	}	phpfbQuery(INTERNAL_FUNCTION_PARAM_PASSTHRU, buffer, phpLink);	if (Z_LVAL_P(return_value))	{		free(phpLink->userName);		phpLink->userName = strdup(userName);	}}/* }}} *//* {{{ proto bool fbsql_create_db(string database_name [, resource link_identifier])   Create a new database on the server */PHP_FUNCTION(fbsql_create_db){	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL, **database_name;	int id;	int i, status;	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 (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128);	status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);	if (status != FBUnknownStatus)	{		char* txt = "Unknown status";		if      (status == FBStopped ) txt = "stopped";		else if (status == FBStarting) txt = "starting";		else if (status == FBRunning ) txt = "running";		else if (status == FBStopping) txt = "stopping";		else if (status == FBNoExec  ) txt = "no exec";		if (FB_SQL_G(generateWarnings))			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create %s@%s, database is %s", databaseName, phpLink->hostName, txt);		RETURN_FALSE;	}	if (!fbcehCreateDatabaseNamedWithOptions(phpLink->execHandler, databaseName, ""))	{		char* error = fbechErrorMessage(phpLink->execHandler);		if (FB_SQL_G(generateWarnings))			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not create %s@%s. %s", databaseName, phpLink->hostName, error);		RETURN_FALSE;	}	for (i=0; i < 20; i++)	{#ifdef PHP_WIN32		Sleep(1000);#else		sleep(1);#endif		status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);		if (status == FBRunning) break;	}	if (status != FBRunning)	{		if (FB_SQL_G(generateWarnings))			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s created -- status unknown", databaseName, phpLink->hostName);		RETURN_FALSE;	}	RETURN_TRUE;}/* }}} *//* {{{ proto int fbsql_drop_db(string database_name [, resource link_identifier])   Drop a database on the server */PHP_FUNCTION(fbsql_drop_db){	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL, **database_name;	int id;	int i, status;	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 (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128);	status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);	if (status != FBStopped)	{		char* txt = "Unknown status";		if      (status == FBStopped      ) txt = "stopped";		else if (status == FBUnknownStatus) txt = "nonexisting";		else if (status == FBStarting     ) txt = "starting";		else if (status == FBRunning      ) txt = "running";		else if (status == FBStopping     ) txt = "stopping";		else if (status == FBNoExec       ) txt = "no exec";		if (FB_SQL_G(generateWarnings))			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not drop %s@%s, database is %s", databaseName, phpLink->hostName, txt);		RETURN_FALSE;	}	if (! fbcehDeleteDatabaseNamed (phpLink->execHandler, databaseName))	{		char* error = fbechErrorMessage(phpLink->execHandler);		if (FB_SQL_G(generateWarnings))			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not drop %s@%s. %s", databaseName, phpLink->hostName, error);		RETURN_FALSE;	}	for (i=0; i < 20; i++)	{#ifdef PHP_WIN32		Sleep(1000);#else		sleep(1);#endif		status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);		if (status == FBUnknownStatus) break;	}	if (status != FBUnknownStatus)	{		if (FB_SQL_G(generateWarnings))			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s dropped -- status unknown", databaseName, phpLink->hostName);		RETURN_FALSE;	}}/* }}} *//* {{{ proto bool fbsql_start_db(string database_name [, resource link_identifier])   Start a database on the server */PHP_FUNCTION(fbsql_start_db){	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL, **database_name;	int id;	int i, status;	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 (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128);	status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);	if ((status != FBStopped) && (status != FBRunning) && (status != FBStarting))	{		char* txt = "Unknown status";		if      (status == FBStopped ) txt = "stopped";		else if (status == FBStarting) txt = "starting";		else if (status == FBRunning ) txt = "running";		else if (status == FBStopping) txt = "stopping";		else if (status == FBNoExec  ) txt = "no exec";		if (FB_SQL_G(generateWarnings))			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not start %s@%s, as database is %s", databaseName, phpLink->hostName, txt);		RETURN_FALSE;	}	if (status == FBStopped)	{		if (!fbcehStartDatabaseNamed (phpLink->execHandler, databaseName))		{			char* error = fbechErrorMessage(phpLink->execHandler);			if (FB_SQL_G(generateWarnings))				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not start %s@%s. %s", databaseName, phpLink->hostName, error);			RETURN_FALSE;		}	}	for (i=0; i < 20; i++)	{#ifdef PHP_WIN32		Sleep(1000);#else		sleep(1);#endif		status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);		if (status == FBRunning) break;	}	if (status != FBRunning)	{		if (FB_SQL_G(generateWarnings))			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Database %s@%s started -- status unknown", databaseName, phpLink->hostName);		RETURN_FALSE;	}	RETURN_TRUE;}/* }}} *//* {{{ proto bool fbsql_stop_db(string database_name [, resource link_identifier])   Stop a database on the server */PHP_FUNCTION(fbsql_stop_db){	PHPFBLink* phpLink = NULL;	zval	**fbsql_link_index = NULL, **database_name;	int id;	int i, status;	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 (!php_fbsql_select_db(databaseName, phpLink TSRMLS_CC)) {		RETURN_FALSE;	}/*	printf("Stop db %x\n", phpDatabase->connection); */	if (!fbcdcStopDatabase(phpLink->connection))	{		if (FB_SQL_G(generateWarnings))			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot stop database %s@%s", databaseName, phpLink->hostName);		RETURN_FALSE;	}	for (i=0; i < 20; i++)	{		status = fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName);		if (status == FBStopped) break;#ifdef PHP_WIN32		Sleep(1000);#else		sleep(1);#endif	}	RETURN_TRUE;}/* }}} *//* {{{ proto int fbsql_db_status(string database_name [, resource link_identifier])   Gets the status (Stopped, Starting, Running, Stopping) for a given database */PHP_FUNCTION(fbsql_db_status){	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 (phpLink->execHandler == NULL) phpLink->execHandler = fbcehHandlerForHost(phpLink->hostName, 128);	if (phpLink->execHandler) {		RETURN_LONG(fbcehStatusForDatabaseNamed(phpLink->execHandler, databaseName));	}	else {		RETURN_FALSE;	}}/* }}} *//* {{{ mdOk */int mdOk(PHPFBLink* link, FBCMetaData* md, char* sql){	FBCDatabaseConnection* c = link->connection;	int result = 1;	TSRMLS_FETCH();	link->errorNo = 0;	if (link->errorText)	{		free(link->errorText);		link->errorText = NULL;	}	if (md == NULL)	{		link->errorNo = 1;		link->errorText = strdup("Connection to database server was lost");		if (FB_SQL_G(generateWarnings)) 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", link->errorText);		result = 0;	}	else if (fbcmdErrorsFound(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, "Error 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);

⌨️ 快捷键说明

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