diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-12-11 12:13:52 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-12-11 12:20:04 +0100 |
commit | d6b4b82a386402058c0eceaec31cfd7b5da765f8 (patch) | |
tree | ec786459951e0b8a8f0399735ba5f0375edc8e7e | |
parent | 4e51059d5246a42c43fc963bf9add11e985df184 (diff) | |
download | php-git-d6b4b82a386402058c0eceaec31cfd7b5da765f8.tar.gz |
PDO MySQL: Use stmt_next_result with libmysqlclient as well
libmysqlclient added this function in version 5.5, which happens
to be the minimum we support. If we have a prepared statement,
we should use it on both mysqlnd and libmysqlclient, even if the
handling afterwards is different.
This fixes error handling with native prepared statements.
-rw-r--r-- | ext/pdo_mysql/mysql_statement.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/ext/pdo_mysql/mysql_statement.c b/ext/pdo_mysql/mysql_statement.c index 46f39c985d..80d8747cd9 100644 --- a/ext/pdo_mysql/mysql_statement.c +++ b/ext/pdo_mysql/mysql_statement.c @@ -341,30 +341,29 @@ static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt) /* {{{ */ PDO_DBG_INF_FMT("stmt=%p", S->stmt); /* ensure that we free any previous unfetched results */ - if (S->stmt) { - mysql_stmt_free_result(S->stmt); - } pdo_mysql_free_result(S); -#ifdef PDO_USE_MYSQLND if (S->stmt) { - if (mysqlnd_stmt_next_result(S->stmt)) { + mysql_stmt_free_result(S->stmt); + if (mysql_stmt_next_result(S->stmt)) { + pdo_mysql_error_stmt(stmt); + S->done = 1; + PDO_DBG_RETURN(0); + } + } else { + if (mysql_next_result(H->server)) { pdo_mysql_error_stmt(stmt); S->done = 1; PDO_DBG_RETURN(0); } + } +#ifdef PDO_USE_MYSQLND + if (S->stmt) { PDO_DBG_RETURN(pdo_mysql_stmt_after_execute_prepared(stmt)); } #endif - - if (mysql_next_result(H->server)) { - pdo_mysql_error_stmt(stmt); - S->done = 1; - PDO_DBG_RETURN(0); - } else { - PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt)); - } + PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt)); } /* }}} */ |