diff options
| author | foobar <sniper@php.net> | 2002-04-28 06:38:12 +0000 | 
|---|---|---|
| committer | foobar <sniper@php.net> | 2002-04-28 06:38:12 +0000 | 
| commit | 80f9fdf3c7ec82db138776e72f750e04b718f83a (patch) | |
| tree | 7930079eff84f4db2678994f96ff1ab06b8f9347 /ext/mysql/php_mysql.c | |
| parent | 8463225b494ebf0d82cdfea69df386699bbdd2df (diff) | |
| download | php-git-80f9fdf3c7ec82db138776e72f750e04b718f83a.tar.gz | |
@- Added optional 3rd parameter to mysql_select_db() which makes it return
@  the previously selected database name. (Jani)
Diffstat (limited to 'ext/mysql/php_mysql.c')
| -rw-r--r-- | ext/mysql/php_mysql.c | 33 | 
1 files changed, 26 insertions, 7 deletions
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c index b94d1b0207..424b70282d 100644 --- a/ext/mysql/php_mysql.c +++ b/ext/mysql/php_mysql.c @@ -769,13 +769,14 @@ PHP_FUNCTION(mysql_close)  }  /* }}} */ -/* {{{ proto bool mysql_select_db(string database_name [, int link_identifier]) +/* {{{ proto bool mysql_select_db(string database_name [, int link_identifier [, bool return_prev_dbname]])     Selects a MySQL database */  PHP_FUNCTION(mysql_select_db)  { -	zval **db, **mysql_link; -	int id; +	zval **db, **mysql_link, **ret_prevdb; +	int id, ret_dbname=0;  	php_mysql_conn *mysql; +	char *prev_db=NULL;  	switch(ZEND_NUM_ARGS()) {  		case 1: @@ -791,20 +792,38 @@ PHP_FUNCTION(mysql_select_db)  			}  			id = -1;  			break; +		case 3: +			if (zend_get_parameters_ex(3, &db, &mysql_link, &ret_prevdb)==FAILURE) { +				RETURN_FALSE; +			} +			id = -1; +			convert_to_long_ex(ret_prevdb); +			ret_dbname = Z_LVAL_PP(ret_prevdb); +			break;  		default:  			WRONG_PARAM_COUNT;  			break;  	} -	 -	 +  	ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, id, "MySQL-Link", le_link, le_plink);  	convert_to_string_ex(db); + +	/* Get the previous database name */ +	if (ret_dbname && mysql->conn.db) { +		prev_db=estrdup(mysql->conn.db); +	}  	if (mysql_select_db(&mysql->conn, Z_STRVAL_PP(db))!=0) { -		RETURN_FALSE; +		RETVAL_FALSE; +	} else if (prev_db) { +		RETVAL_STRING(prev_db, 1);  	} else { -		RETURN_TRUE; +		RETVAL_TRUE; +	} + +	if (prev_db) { +		efree(prev_db);  	}  }  /* }}} */  | 
