Skip to content

Commit 27ecaa7

Browse files
committed
Skip additional result sets sent by MySQL 5.5 servers
which break the Protocol API (see http://bugs.mysql.com/bug.php?id=58700)
1 parent e183ea0 commit 27ecaa7

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

ext/mysqlnd/mysqlnd_ps.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,15 @@ MYSQLND_METHOD(mysqlnd_stmt, next_result)(MYSQLND_STMT * s TSRMLS_DC)
225225
DBG_RETURN(FAIL);
226226
}
227227

228+
DBG_INF_FMT("server_status=%u cursor=%u", stmt->upsert_status.server_status, stmt->upsert_status.server_status & SERVER_STATUS_CURSOR_EXISTS);
229+
DBG_INF_FMT("server_status=%u cursor=%u", conn->upsert_status.server_status, conn->upsert_status.server_status & SERVER_STATUS_CURSOR_EXISTS);
230+
228231
/* Free space for next result */
229232
s->m->free_stmt_content(s TSRMLS_CC);
230-
231-
DBG_RETURN(s->m->parse_execute_response(s TSRMLS_CC));
233+
{
234+
enum_func_status ret = s->m->parse_execute_response(s TSRMLS_CC);
235+
DBG_RETURN(ret);
236+
}
232237
}
233238
/* }}} */
234239

@@ -556,6 +561,14 @@ mysqlnd_stmt_execute_parse_response(MYSQLND_STMT * const s TSRMLS_DC)
556561
}
557562
}
558563
}
564+
#ifndef MYSQLND_DONT_SKIP_OUT_PARAMS_RESULTSET
565+
if (stmt->upsert_status.server_status & SERVER_PS_OUT_PARAMS) {
566+
s->m->free_stmt_content(s TSRMLS_CC);
567+
DBG_INF("PS OUT Variable RSet, skipping");
568+
/* OUT params result set. Skip for now to retain compatibility */
569+
ret = mysqlnd_stmt_execute_parse_response(s TSRMLS_CC);
570+
}
571+
#endif
559572

560573
DBG_INF(ret == PASS? "PASS":"FAIL");
561574
DBG_RETURN(ret);
@@ -701,6 +714,8 @@ MYSQLND_METHOD(mysqlnd_stmt, execute)(MYSQLND_STMT * const s TSRMLS_DC)
701714

702715
ret = s->m->parse_execute_response(s TSRMLS_CC);
703716

717+
DBG_INF_FMT("server_status=%u cursor=%u", stmt->upsert_status.server_status, stmt->upsert_status.server_status & SERVER_STATUS_CURSOR_EXISTS);
718+
704719
if (ret == PASS && conn->last_query_type == QUERY_UPSERT && stmt->upsert_status.affected_rows) {
705720
MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn->stats, STAT_ROWS_AFFECTED_PS, stmt->upsert_status.affected_rows);
706721
}

0 commit comments

Comments
 (0)