]> granicus.if.org Git - php/commitdiff
Adding a new function odbc_next_result() allowing the query to return more than one...
authorFrank M. Kromann <fmk@php.net>
Fri, 9 Mar 2001 23:44:55 +0000 (23:44 +0000)
committerFrank M. Kromann <fmk@php.net>
Fri, 9 Mar 2001 23:44:55 +0000 (23:44 +0000)
This can be done with a stored procedure or by sending more than one select to the server.

ext/odbc/php_odbc.c
ext/odbc/php_odbc.h

index 28e8ff7d0bb81c2858f4ba8a50239a55e1ed231e..50f7b60be086b67312c4ff8dd153b45440e53714 100644 (file)
@@ -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)
index 7cf7be6897a3ee4cabb1396e851b7f00d03263d6..b9052685ffd475d7f3a632191a1dbfd25c98ad85 100644 (file)
@@ -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);