From: Nikita Popov Date: Wed, 9 Dec 2020 13:04:30 +0000 (+0100) Subject: PDO MySQL: Handle error during closeCursor() X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=23193e89e4cf3a503473a912154f2c8c9b92ee93;p=php PDO MySQL: Handle error during closeCursor() --- diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c index e82cc6ddcc..7d0988b384 100644 --- a/ext/pdo_mysql/mysql_statement.c +++ b/ext/pdo_mysql/mysql_statement.c @@ -899,7 +899,8 @@ static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *stmt) /* {{{ */ while (mysql_more_results(S->H->server)) { MYSQL_RES *res; if (mysql_next_result(S->H->server) != 0) { - break; + pdo_mysql_error_stmt(stmt); + PDO_DBG_RETURN(0); } res = mysql_store_result(S->H->server); if (res) { diff --git a/ext/pdo_mysql/tests/pdo_mysql_closecursor_error.phpt b/ext/pdo_mysql/tests/pdo_mysql_closecursor_error.phpt new file mode 100644 index 0000000000..1f9421fe8a --- /dev/null +++ b/ext/pdo_mysql/tests/pdo_mysql_closecursor_error.phpt @@ -0,0 +1,30 @@ +--TEST-- +Error during closeCursor() of multi query +--SKIPIF-- + +--FILE-- +query('SELECT 1; SELECT x FROM does_not_exist'); +var_dump($stmt->fetchAll()); +var_dump($stmt->closeCursor()); +?> +--EXPECTF-- +array(1) { + [0]=> + array(2) { + [1]=> + string(1) "1" + [0]=> + string(1) "1" + } +} + +Warning: PDOStatement::closeCursor(): SQLSTATE[42S02]: Base table or view not found: 1146 Table '%s.does_not_exist' doesn't exist in %s on line %d +bool(false)