summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZak Greant <zak@php.net>2002-10-09 12:33:40 +0000
committerZak Greant <zak@php.net>2002-10-09 12:33:40 +0000
commit0ecf32f75044c42113acdd389dab95e20dd1cf59 (patch)
tree04fac5dcce1fe480177c97938591645f5bde9dd2
parenta15877930c0d1f60bb1c67a2220afeec0842f1d7 (diff)
downloadphp-git-0ecf32f75044c42113acdd389dab95e20dd1cf59.tar.gz
Possible fix for bug #19529 (thanks Rasmus, Arjen and Monty)
Major changes to _restore_connection_defaults - added code block to finds and releases the active mysql result (if any) - this should prevent the 'Commands out of sync' error that would be raised when a query is made when unfreed results exist Minor changes to _restore_connection_defaults - replaced calls to mysql_real_query with mysql_query - we probably should not be using mysql_real_query without checking to see if we have a version that supports the function. - given that we control the query strings here and do not need to worry about binary safety, I am using mysql_query instead - see the bug report for further discussion
-rw-r--r--ext/mysql/php_mysql.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/ext/mysql/php_mysql.c b/ext/mysql/php_mysql.c
index 6a14bfd98f..71f4277ef5 100644
--- a/ext/mysql/php_mysql.c
+++ b/ext/mysql/php_mysql.c
@@ -229,7 +229,7 @@ void timeout(int sig);
static int _restore_connection_defaults(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
php_mysql_conn *link;
- char query[128];
+ char query[17]; /* Increase size if query length increases */
char user[128];
char passwd[128];
@@ -239,13 +239,27 @@ static int _restore_connection_defaults(zend_rsrc_list_entry *rsrc TSRMLS_DC)
link = (php_mysql_conn *) rsrc->ptr;
+ /* Find the active result set and free it */
+ if (link->active_result_id) {
+ int type;
+ MYSQL_RES *mysql_result;
+
+ mysql_result = (MYSQL_RES *) zend_list_find(link->active_result_id, &type);
+ if (mysql_result && type==le_result) {
+ zend_list_delete(link->active_result_id);
+ link->active_result_id = 0;
+ }
+ }
+
/* rollback possible transactions */
strcpy (query, "ROLLBACK");
- mysql_real_query(&link->conn, query, strlen(query));
+ /* Binary safe query not required here */
+ mysql_query(&link->conn, query);
/* restore session variable "autocommit" to default (=1) */
strcpy (query, "SET AUTOCOMMIT=1");
- mysql_real_query(&link->conn, query, strlen(query));
+ /* Binary safe query not required here */
+ mysql_query(&link->conn, query);
/* unset the current selected db */
#if MYSQL_VERSION_ID > 32329