]> granicus.if.org Git - php/commitdiff
Fix two bugs:
authorWez Furlong <wez@php.net>
Sat, 9 Jul 2005 03:54:13 +0000 (03:54 +0000)
committerWez Furlong <wez@php.net>
Sat, 9 Jul 2005 03:54:13 +0000 (03:54 +0000)
- execute() would not re-fetch meta data after nextRowset() had been called.

- buffered mode would only be enabled on the first execute on a statement handle.

ext/pdo_mysql/mysql_statement.c

index 35cfa4639ccb6796f8911114c0ad51b409210f5d..5a6dd2fe763e85d3f5ea9fec6572fa9a7c11026d 100755 (executable)
@@ -91,17 +91,13 @@ static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
                        return 0;
                }
 
-               if (!stmt->executed) {
+               if (!S->result) {
                        /* figure out the result set format, if any */
                        S->result = mysql_stmt_result_metadata(S->stmt);
                        if (S->result) {
                                S->fields = mysql_fetch_fields(S->result);
                                stmt->column_count = (int)mysql_num_fields(S->result);
 
-                               if (H->buffered) {
-                                       mysql_stmt_store_result(S->stmt);
-                               }
-
                                S->bound_result = ecalloc(stmt->column_count, sizeof(MYSQL_BIND));
                                S->out_null = ecalloc(stmt->column_count, sizeof(my_bool));
                                S->out_length = ecalloc(stmt->column_count, sizeof(unsigned long));
@@ -121,6 +117,11 @@ static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC)
                                }
                        }
                }
+
+               /* if buffered, pre-fetch all the data */
+               if (H->buffered) {
+                       mysql_stmt_store_result(S->stmt);
+               }
                
                stmt->row_count = mysql_stmt_affected_rows(S->stmt);
                return 1;