/* Release remaining results */
do {
retvalue = dbresults(result->mssql_ptr->link);
- } while (retvalue != NO_MORE_RESULTS && retvalue != FAIL);
+ } while (retvalue == SUCCEED);
zend_list_delete(Z_RESVAL_PP(mssql_result_index));
RETURN_TRUE;
}
/* }}} */
-/* {{{ proto int mssql_execute(int stmt)
+/* {{{ proto int mssql_execute(int stmt [, bool skip_results = false])
Executes a stored procedure on a MS-SQL server database */
PHP_FUNCTION(mssql_execute)
{
- zval **stmt;
+ zval **stmt, **skip;
+ zend_bool skip_results = 0;
int retvalue,retval_results;
mssql_link *mssql_ptr;
mssql_statement *statement;
int ac = ZEND_NUM_ARGS();
batchsize = MS_SQL_G(batchsize);
- if (ac !=1 || zend_get_parameters_ex(1, &stmt)==FAILURE) {
+ if (ac < 1 || ac > 2 || zend_get_parameters_ex(1, &stmt, &skip)==FAILURE) {
WRONG_PARAM_COUNT;
}
+ if (ac == 2) {
+ skip_results = Z_BVAL_PP(skip);
+ }
ZEND_FETCH_RESOURCE(statement, mssql_statement *, stmt, -1, "MS SQL-Statement", le_statement);
* set into the row buffer.
*/
result=NULL;
- if (retval_results==SUCCEED) {
+ if (retval_results == SUCCEED) {
if ( (retvalue=(dbnextrow(mssql_ptr->link)))!=NO_MORE_ROWS ) {
num_fields = dbnumcols(mssql_ptr->link);
if (num_fields <= 0) {
result->num_rows = _mssql_fetch_batch(mssql_ptr, result, retvalue TSRMLS_CC);
result->statement = statement;
}
+ if (skip_results) {
+ do {
+ retval_results = dbresults(mssql_ptr->link);
+ } while (retval_results == SUCCEED);
+
+ _mssql_get_sp_result(mssql_ptr, statement TSRMLS_CC);
+ }
+ }
+ else if (retval_results == NO_MORE_RESULTS || retval_results == NO_MORE_RPC_RESULTS) {
+ _mssql_get_sp_result(mssql_ptr, statement TSRMLS_CC);
}
- /* Try to get output parameters. Won't work if there are more record sets
- * in the batch until they are all retrieved with mssql_next_result().
- */
- _mssql_get_sp_result(mssql_ptr, statement TSRMLS_CC);
if (result==NULL) {
RETURN_TRUE; /* no recordset returned ...*/
/* Release remaining results */
do {
retvalue = dbresults(statement->link->link);
- } while (retvalue != NO_MORE_RESULTS && retvalue != FAIL);
+ } while (retvalue == SUCCEED);
zend_list_delete(Z_RESVAL_PP(mssql_statement_index));
RETURN_TRUE;