From: Nikita Popov Date: Wed, 9 Dec 2020 11:46:47 +0000 (+0100) Subject: Fixed bug #78154 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=44b234a9bc589ee6c4afe3e1c386d536f750abe2;p=php Fixed bug #78154 Handle errors during next_result in exec. --- diff --git a/NEWS b/NEWS index 9560df1c93..d3c5e52139 100644 --- a/NEWS +++ b/NEWS @@ -34,6 +34,8 @@ PHP NEWS (Kamil Tekiela) . Fixed bug #63185 (nextRowset() ignores MySQL errors with native prepared statements). (Nikita) + . Fixed bug #78152 (PDO::exec() - Bad error handling with multiple commands). + (Nikita) - Phpdbg: . Fixed bug #76813 (Access violation near NULL on source operand). (cmb) diff --git a/ext/pdo_mysql/mysql_driver.c b/ext/pdo_mysql/mysql_driver.c index 344b6fe637..2d8c4698e7 100644 --- a/ext/pdo_mysql/mysql_driver.c +++ b/ext/pdo_mysql/mysql_driver.c @@ -269,7 +269,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-- + +--FILE-- +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-- + +--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