summaryrefslogtreecommitdiff
path: root/ext/pdo_mysql
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-12-09 12:47:48 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-12-09 12:47:48 +0100
commit7eae14690f0525016cf005c7372c723506ebfd58 (patch)
treec87ac583b6a3747c15b88e8e091f66881dc77a47 /ext/pdo_mysql
parentde22980ac8217c80043a48f3b24ce6b2b21379eb (diff)
parent71b5f1446e45fd4ab9255fd3287cebeceaf45be3 (diff)
downloadphp-git-7eae14690f0525016cf005c7372c723506ebfd58.tar.gz
Merge branch 'PHP-8.0'
* PHP-8.0: Fixed bug #78154
Diffstat (limited to 'ext/pdo_mysql')
-rw-r--r--ext/pdo_mysql/mysql_driver.c3
-rw-r--r--ext/pdo_mysql/tests/bug78152.phpt33
2 files changed, 35 insertions, 1 deletions
diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c
index a83b12b872..410412a169 100644
--- a/ext/pdo_mysql/mysql_driver.c
+++ b/ext/pdo_mysql/mysql_driver.c
@@ -267,7 +267,8 @@ static zend_long mysql_handle_doer(pdo_dbh_t *dbh, const char *sql, size_t sql_l
MYSQL_RES* result;
while (mysql_more_results(H->server)) {
if (mysql_next_result(H->server)) {
- PDO_DBG_RETURN(1);
+ pdo_mysql_error(dbh);
+ PDO_DBG_RETURN(-1);
}
result = mysql_store_result(H->server);
if (result) {
diff --git a/ext/pdo_mysql/tests/bug78152.phpt b/ext/pdo_mysql/tests/bug78152.phpt
new file mode 100644
index 0000000000..8fc4fc7986
--- /dev/null
+++ b/ext/pdo_mysql/tests/bug78152.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #78152: PDO::exec() - Bad error handling with multiple commands
+--SKIPIF--
+<?php
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+MySQLPDOTest::skip();
+?>
+--FILE--
+<?php
+
+require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
+$db = MySQLPDOTest::factory();
+MySQLPDOTest::createTestTable($db);
+
+var_dump($db->exec("INSERT INTO test(id, label) VALUES (41, 'x'); INSERT INTO test_bad(id, label) VALUES (42, 'y')"));
+$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+try {
+ var_dump($db->exec("INSERT INTO test(id, label) VALUES (42, 'x'); INSERT INTO test_bad(id, label) VALUES (43, 'y')"));
+} catch (PDOException $e) {
+ echo $e->getMessage(), "\n";
+}
+
+?>
+--CLEAN--
+<?php
+require dirname(__FILE__) . '/mysql_pdo_test.inc';
+MySQLPDOTest::dropTestTable();
+?>
+--EXPECTF--
+Warning: PDO::exec(): SQLSTATE[42S02]: Base table or view not found: 1146 Table '%s.test_bad' doesn't exist in %s on line %d
+bool(false)
+SQLSTATE[42S02]: Base table or view not found: 1146 Table '%s.test_bad' doesn't exist