diff options
| author | Zeev Suraski <zeev@php.net> | 2001-03-13 21:42:43 +0000 | 
|---|---|---|
| committer | Zeev Suraski <zeev@php.net> | 2001-03-13 21:42:43 +0000 | 
| commit | fdf21452ed0d525de0d21b9009ea6bc38182f0aa (patch) | |
| tree | 91129fbc96570ed0069c321d0f2bb47b05d8ac52 /ext/mysql/php_mysql.c | |
| parent | f5ddc2826d3a3c443fcb2e0e5a8bfb02db6284ab (diff) | |
| download | php-git-fdf21452ed0d525de0d21b9009ea6bc38182f0aa.tar.gz | |
Centralize query code
Diffstat (limited to 'ext/mysql/php_mysql.c')
| -rw-r--r-- | ext/mysql/php_mysql.c | 123 | 
1 files changed, 51 insertions, 72 deletions
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c index 53501a11b0..7956ad05e5 100644 --- a/ext/mysql/php_mysql.c +++ b/ext/mysql/php_mysql.c @@ -102,6 +102,7 @@ static int le_result, le_link, le_plink;  typedef struct _php_mysql_conn {  	MYSQL conn; +	MYSQL_RES *active_result;  } php_mysql_conn; @@ -898,17 +899,61 @@ PHP_FUNCTION(mysql_drop_db)  /* }}} */ + + +static void php_mysql_do_query(zval **query, zval **mysql_link, int link_id, zval **db, int use_store, zval *return_value) +{ +	php_mysql_conn *mysql; +	MYSQL_RES *mysql_result; +	MySLS_FETCH(); +	 +	ZEND_FETCH_RESOURCE2(mysql, php_mysql_conn *, mysql_link, link_id, "MySQL-Link", le_link, le_plink); +	 +	if (db) { +		convert_to_string_ex(db); +		if (mysql_select_db(&mysql->conn, (*db)->value.str.val)!=0) { +			RETURN_FALSE; +		} +	} +	 +	convert_to_string_ex(query); +	/* mysql_query is binary unsafe, use mysql_real_query */ +#if MYSQL_VERSION_ID > 32199  +	if (mysql_real_query(&mysql->conn, (*query)->value.str.val, (*query)->value.str.len)!=0) { +		RETURN_FALSE; +	} +#else +	if (mysql_query(&mysql->conn, (*query)->value.str.val)!=0) { +		RETURN_FALSE; +	} +#endif +	if(use_store == MYSQL_USE_RESULT) { +		mysql_result=mysql_use_result(&mysql->conn); +	} else { +		mysql_result=mysql_store_result(&mysql->conn); +	} +	if (!mysql_result) { +		if (PHP_MYSQL_VALID_RESULT(&mysql->conn)) { /* query should have returned rows */ +			php_error(E_WARNING, "MySQL:  Unable to save result set"); +			RETURN_FALSE; +		} else { +			RETURN_TRUE; +		} +	} +	ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); +} + + + + +  /* {{{ proto int mysql_query(string query [, int link_identifier] [, int result_mode])     Send an SQL query to MySQL */  PHP_FUNCTION(mysql_query)  {  	zval **query, **mysql_link; -#if 0  	zval **store_result; -#endif  	int id, use_store=MYSQL_STORE_RESULT; -	php_mysql_conn *mysql; -	MYSQL_RES *mysql_result;  	MySLS_FETCH();  	switch(ZEND_NUM_ARGS()) { @@ -925,7 +970,6 @@ PHP_FUNCTION(mysql_query)  			}  			id = -1;  			break; -#if 0 /* need to work more on the mysql_store_result() approach */  	    case 3:  			if(zend_get_parameters_ex(3, &query, &mysql_link, &store_result)==FAILURE) {  				RETURN_FALSE; @@ -936,39 +980,11 @@ PHP_FUNCTION(mysql_query)  			}  			id = -1;  			break; -#endif  		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(query); -	/* mysql_query binary unsafe, use mysql_real_query */ -#if MYSQL_VERSION_ID > 32199  -	if (mysql_real_query(&mysql->conn, (*query)->value.str.val, (*query)->value.str.len)!=0) { -		RETURN_FALSE; -	} -#else -	if (mysql_query(&mysql->conn, (*query)->value.str.val)!=0) { -		RETURN_FALSE; -	} -#endif -	if(use_store == MYSQL_USE_RESULT) { -		mysql_result=mysql_use_result(&mysql->conn); -	} else { -		mysql_result=mysql_store_result(&mysql->conn); -	} -	if (!mysql_result) { -		if (PHP_MYSQL_VALID_RESULT(&mysql->conn)) { /* query should have returned rows */ -			php_error(E_WARNING, "MySQL:  Unable to save result set"); -			RETURN_FALSE; -		} else { -			RETURN_TRUE; -		} -	} -	ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); +	php_mysql_do_query(query, mysql_link, id, NULL, use_store, return_value);  }  /* }}} */ @@ -978,12 +994,8 @@ PHP_FUNCTION(mysql_query)  PHP_FUNCTION(mysql_db_query)  {  	zval **db, **query, **mysql_link; -#if 0  	zval **store_result; -#endif  	int id, use_store=MYSQL_STORE_RESULT; -	php_mysql_conn *mysql; -	MYSQL_RES *mysql_result;  	MySLS_FETCH();  	switch(ZEND_NUM_ARGS()) { @@ -1000,7 +1012,6 @@ PHP_FUNCTION(mysql_db_query)  			}  			id = -1;  			break; -#if 0  	    case 4:  			if(zend_get_parameters_ex(4, &db, &query, &mysql_link, &store_result)==FAILURE) {  				RETURN_FALSE; @@ -1011,44 +1022,12 @@ PHP_FUNCTION(mysql_db_query)  			}  			id = -1;  			break; -#endif  		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); -	if (mysql_select_db(&mysql->conn, (*db)->value.str.val)!=0) { -		RETURN_FALSE; -	} -	 -	convert_to_string_ex(query); -	/* mysql_query is binary unsafe, use mysql_real_query */ -#if MYSQL_VERSION_ID > 32199  -	if (mysql_real_query(&mysql->conn, (*query)->value.str.val, (*query)->value.str.len)!=0) { -		RETURN_FALSE; -	} -#else -	if (mysql_query(&mysql->conn, (*query)->value.str.val)!=0) { -		RETURN_FALSE; -	} -#endif -	if(use_store == MYSQL_USE_RESULT) { -		mysql_result=mysql_use_result(&mysql->conn); -	} else { -		mysql_result=mysql_store_result(&mysql->conn); -	} -	if (!mysql_result) { -		if (PHP_MYSQL_VALID_RESULT(&mysql->conn)) { /* query should have returned rows */ -			php_error(E_WARNING, "MySQL:  Unable to save result set"); -			RETURN_FALSE; -		} else { -			RETURN_TRUE; -		} -	} -	ZEND_REGISTER_RESOURCE(return_value, mysql_result, le_result); +	php_mysql_do_query(query, mysql_link, id, db, use_store, return_value);  }  /* }}} */  | 
