diff options
| author | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:37:27 -0400 |
|---|---|---|
| committer | Mark A. Hershberger <mah@debian.(none)> | 2009-03-25 00:37:27 -0400 |
| commit | 2d4e5b09576bb4f0ba716cc82cdf29ea04d9184b (patch) | |
| tree | 41ccc042009cba53e4ce43e727fcba4c1cfbf7f3 /ext/pdo_mysql/mysql_statement.c | |
| parent | d29a4fd2dd3b5d4cf6e80b602544d7b71d794e76 (diff) | |
| download | php-2d4e5b09576bb4f0ba716cc82cdf29ea04d9184b.tar.gz | |
Imported Upstream version 5.2.2upstream/5.2.2
Diffstat (limited to 'ext/pdo_mysql/mysql_statement.c')
| -rwxr-xr-x | ext/pdo_mysql/mysql_statement.c | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c index 7675e1ee7..de37ec28a 100755 --- a/ext/pdo_mysql/mysql_statement.c +++ b/ext/pdo_mysql/mysql_statement.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2006 The PHP Group | + | Copyright (c) 1997-2007 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysql_statement.c,v 1.48.2.14 2006/04/22 16:35:18 wez Exp $ */ +/* $Id: mysql_statement.c,v 1.48.2.14.2.5 2007/04/15 16:50:42 iliaa Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -68,15 +68,17 @@ static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC) } #endif #if HAVE_MYSQL_NEXT_RESULT - while (mysql_more_results(S->H->server)) { - MYSQL_RES *res; - if (mysql_next_result(S->H->server) != 0) { - break; - } + if (S->H->server) { + while (mysql_more_results(S->H->server)) { + MYSQL_RES *res; + if (mysql_next_result(S->H->server) != 0) { + break; + } - res = mysql_store_result(S->H->server); - if (res) { - mysql_free_result(res); + res = mysql_store_result(S->H->server); + if (res) { + mysql_free_result(res); + } } } #endif @@ -229,7 +231,7 @@ static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC) return 0; } - stmt->row_count = 0; + stmt->row_count = mysql_num_rows(S->result); if (!stmt->executed) { stmt->column_count = (int) mysql_num_fields(S->result); @@ -271,15 +273,15 @@ static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) /* No more results */ return 0; } else { - if ((my_ulonglong)-1 == (row_count = mysql_affected_rows(H->server))) { - pdo_mysql_error_stmt(stmt); - return 0; - } - if (!H->buffered) { S->result = mysql_use_result(H->server); + row_count = 0; } else { S->result = mysql_store_result(H->server); + if ((my_ulonglong)-1 == (row_count = mysql_affected_rows(H->server))) { + pdo_mysql_error_stmt(stmt); + return 0; + } } if (NULL == S->result) { @@ -411,6 +413,7 @@ static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, #endif if (!S->result) { + strcpy(stmt->error_code, "HY000"); return 0; } if ((S->current_data = mysql_fetch_row(S->result)) == NULL) { @@ -593,16 +596,24 @@ static int pdo_mysql_stmt_col_meta(pdo_stmt_t *stmt, long colno, zval *return_va static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *stmt TSRMLS_DC) { pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data; + + if (S->result) { + mysql_free_result(S->result); + S->result = NULL; + } #if HAVE_MYSQL_STMT_PREPARE if (S->stmt) { - int retval = mysql_stmt_free_result(S->stmt); + int retval; + if (!S->H->buffered) { + retval = mysql_stmt_close(S->stmt); + S->stmt = NULL; + } else { + retval = mysql_stmt_free_result(S->stmt); + } return retval ? 0 : 1; } #endif - if (S->result) { - mysql_free_result(S->result); - S->result = NULL; - } + #if HAVE_MYSQL_NEXT_RESULT while (mysql_more_results(S->H->server)) { MYSQL_RES *res; |
