summaryrefslogtreecommitdiff
path: root/ext/mysql/php_mysql.c
diff options
context:
space:
mode:
authorfoobar <sniper@php.net>2002-04-28 06:38:12 +0000
committerfoobar <sniper@php.net>2002-04-28 06:38:12 +0000
commit80f9fdf3c7ec82db138776e72f750e04b718f83a (patch)
tree7930079eff84f4db2678994f96ff1ab06b8f9347 /ext/mysql/php_mysql.c
parent8463225b494ebf0d82cdfea69df386699bbdd2df (diff)
downloadphp-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.c33
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);
}
}
/* }}} */