summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-12-10 10:31:23 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-12-10 10:31:36 +0100
commit9b678bc4d5f56810e468bae7b6fdd9bd825b58ab (patch)
tree83fa1289746ccd425c26406c2057d8ee2d61c7d0
parent26c7b9402da7308e92d7cecd3bebd465341467c5 (diff)
parent4922049213f9630b9cfd8fe196ab770d74c5fc57 (diff)
downloadphp-git-9b678bc4d5f56810e468bae7b6fdd9bd825b58ab.tar.gz
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4: Fixed bug #71145
-rw-r--r--NEWS2
-rw-r--r--ext/mysqlnd/mysqlnd_connection.c12
-rw-r--r--ext/pdo_mysql/tests/bug71145.phpt25
3 files changed, 34 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index 654544bb8f..b40a1dea51 100644
--- a/NEWS
+++ b/NEWS
@@ -47,6 +47,8 @@ PHP NEWS
is unset()). (Nikita)
. Fixed bug #70066 (Unexpected "Cannot execute queries while other unbuffered
queries"). (Nikita)
+ . Fixed bug #71145 (Multiple statements in init command triggers unbuffered
+ query error). (Nikita)
- Phar:
. Fixed bug #73809 (Phar Zip parse crash - mmap fail). (cmb)
diff --git a/ext/mysqlnd/mysqlnd_connection.c b/ext/mysqlnd/mysqlnd_connection.c
index 35cc3f55fc..d034fb0ca3 100644
--- a/ext/mysqlnd/mysqlnd_connection.c
+++ b/ext/mysqlnd/mysqlnd_connection.c
@@ -454,12 +454,14 @@ MYSQLND_METHOD(mysqlnd_conn_data, execute_init_commands)(MYSQLND_CONN_DATA * con
ret = FAIL;
break;
}
- if (conn->last_query_type == QUERY_SELECT) {
- MYSQLND_RES * result = conn->m->use_result(conn, 0);
- if (result) {
- result->m.free_result(result, TRUE);
+ do {
+ if (conn->last_query_type == QUERY_SELECT) {
+ MYSQLND_RES * result = conn->m->use_result(conn, 0);
+ if (result) {
+ result->m.free_result(result, TRUE);
+ }
}
- }
+ } while (conn->m->next_result(conn) != FAIL);
}
}
}
diff --git a/ext/pdo_mysql/tests/bug71145.phpt b/ext/pdo_mysql/tests/bug71145.phpt
new file mode 100644
index 0000000000..b3f887d7c4
--- /dev/null
+++ b/ext/pdo_mysql/tests/bug71145.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #71145: Multiple statements in init command triggers unbuffered query error
+--SKIPIF--
+<?php
+require_once(__DIR__ . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+?>
+--FILE--
+<?php
+
+require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+
+$attr = array(
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+ PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci; SET SESSION sql_mode=traditional',
+);
+putenv('PDOTEST_ATTR=' . serialize($attr));
+
+$pdo = MySQLPDOTest::factory();
+var_dump($pdo->query('SELECT 42')->fetchColumn(0));
+
+?>
+--EXPECT--
+string(2) "42"