summaryrefslogtreecommitdiff
path: root/ext/pdo_mysql/mysql_statement.c
diff options
context:
space:
mode:
authorMark A. Hershberger <mah@debian.(none)>2009-03-25 00:37:27 -0400
committerMark A. Hershberger <mah@debian.(none)>2009-03-25 00:37:27 -0400
commit2d4e5b09576bb4f0ba716cc82cdf29ea04d9184b (patch)
tree41ccc042009cba53e4ce43e727fcba4c1cfbf7f3 /ext/pdo_mysql/mysql_statement.c
parentd29a4fd2dd3b5d4cf6e80b602544d7b71d794e76 (diff)
downloadphp-2d4e5b09576bb4f0ba716cc82cdf29ea04d9184b.tar.gz
Imported Upstream version 5.2.2upstream/5.2.2
Diffstat (limited to 'ext/pdo_mysql/mysql_statement.c')
-rwxr-xr-xext/pdo_mysql/mysql_statement.c53
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;