mirror of
https://github.com/php/php-src.git
synced 2026-04-29 03:03:26 +02:00
Adding a new function odbc_next_result() allowing the query to return more than one result.
This can be done with a stored procedure or by sending more than one select to the server.
This commit is contained in:
+50
-1
@@ -14,7 +14,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Stig Sæther Bakken <ssb@fast.no> |
|
||||
| Andreas Karajannis <Andreas.Karajannis@gmd.de> |
|
||||
| Frank M. Kromann <fmk@businessnet.dk> Support for DB/2 CLI |
|
||||
| Frank M. Kromann <frank@frontbase.com> Support for DB/2 CLI |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
@@ -91,6 +91,7 @@ function_entry odbc_functions[] = {
|
||||
PHP_FE(odbc_field_type, NULL)
|
||||
PHP_FE(odbc_field_num, NULL)
|
||||
PHP_FE(odbc_free_result, NULL)
|
||||
PHP_FE(odbc_next_result, NULL)
|
||||
PHP_FE(odbc_num_fields, NULL)
|
||||
PHP_FE(odbc_num_rows, NULL)
|
||||
PHP_FE(odbc_result, NULL)
|
||||
@@ -2207,6 +2208,54 @@ PHP_FUNCTION(odbc_num_rows)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto bool next_result(int result_id)
|
||||
Checks if multiple results are avaiable */
|
||||
PHP_FUNCTION(odbc_next_result)
|
||||
{
|
||||
odbc_result *result;
|
||||
pval **pv_res;
|
||||
int rc, i;
|
||||
|
||||
if (zend_get_parameters_ex(1, &pv_res) == FAILURE) {
|
||||
WRONG_PARAM_COUNT;
|
||||
}
|
||||
ZEND_FETCH_RESOURCE(result, odbc_result *, pv_res, -1, "ODBC result", le_result);
|
||||
|
||||
if (result->values) {
|
||||
for(i = 0; i < result->numcols; i++) {
|
||||
if (result->values[i].value)
|
||||
efree(result->values[i].value);
|
||||
}
|
||||
efree(result->values);
|
||||
result->values = NULL;
|
||||
}
|
||||
|
||||
result->fetched = 0;
|
||||
rc = SQLMoreResults(result->stmt);
|
||||
if (rc == SQL_SUCCESS) {
|
||||
RETURN_TRUE;
|
||||
}
|
||||
else if (rc == SQL_SUCCESS_WITH_INFO) {
|
||||
rc = SQLFreeStmt(result->stmt, SQL_UNBIND);
|
||||
SQLNumParams(result->stmt, &(result->numparams));
|
||||
SQLNumResultCols(result->stmt, &(result->numcols));
|
||||
|
||||
if (result->numcols > 0) {
|
||||
if (!odbc_bindcols(result)) {
|
||||
efree(result);
|
||||
RETVAL_FALSE;
|
||||
}
|
||||
} else {
|
||||
result->values = NULL;
|
||||
}
|
||||
RETURN_TRUE;
|
||||
}
|
||||
else {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto int odbc_num_fields(int result_id)
|
||||
Get number of columns in a result */
|
||||
PHP_FUNCTION(odbc_num_fields)
|
||||
|
||||
@@ -207,6 +207,7 @@ PHP_FUNCTION(odbc_field_name);
|
||||
PHP_FUNCTION(odbc_field_type);
|
||||
PHP_FUNCTION(odbc_field_num);
|
||||
PHP_FUNCTION(odbc_free_result);
|
||||
PHP_FUNCTION(odbc_next_result);
|
||||
PHP_FUNCTION(odbc_num_fields);
|
||||
PHP_FUNCTION(odbc_num_rows);
|
||||
PHP_FUNCTION(odbc_prepare);
|
||||
|
||||
Reference in New Issue
Block a user