From 98235c51297682ea68e0c9180b51dd1d0995b8ce Mon Sep 17 00:00:00 2001 From: Kamil Tekiela Date: Thu, 27 Oct 2022 14:52:25 +0100 Subject: [PATCH] mysqli_query throws warning despite using silenced error mode --- ext/mysqli/mysqli.c | 1 + ext/mysqli/mysqli_nonapi.c | 6 +-- ext/mysqli/tests/gh9841.phpt | 78 ++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 ext/mysqli/tests/gh9841.phpt diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 165893b32f4a1..89e394b1c9ac6 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -1043,6 +1043,7 @@ PHP_METHOD(mysqli_result, __construct) } if (!result) { + MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 364638c44a077..615674a7c5b52 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -701,8 +701,7 @@ PHP_FUNCTION(mysqli_query) break; } if (!result) { - php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql), - "%s", mysql_error(mysql->mysql)); + MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } @@ -935,8 +934,7 @@ PHP_FUNCTION(mysqli_reap_async_query) } if (!result) { - php_mysqli_throw_sql_exception((char *)mysql_sqlstate(mysql->mysql), mysql_errno(mysql->mysql), - "%s", mysql_error(mysql->mysql)); + MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } diff --git a/ext/mysqli/tests/gh9841.phpt b/ext/mysqli/tests/gh9841.phpt new file mode 100644 index 0000000000000..c51e9a001205f --- /dev/null +++ b/ext/mysqli/tests/gh9841.phpt @@ -0,0 +1,78 @@ +--TEST-- +Bug GH-9841 (mysqli_query throws warning despite using silenced error mode) +--SKIPIF-- + +--FILE-- +query("SELECT ( + SELECT 1 AS val + UNION ALL + SELECT 2 + ) FROM dual"); + +$mysqli->query("SELECT ( + SELECT 1 AS val + UNION ALL + SELECT 2 + ) FROM dual", MYSQLI_ASYNC); +$mysqli->reap_async_query(); + +$mysqli->real_query("SELECT ( + SELECT 1 AS val + UNION ALL + SELECT 2 +) FROM dual"); +$result = new mysqli_result($mysqli); + +// now make sure the errors are thrown when not using silent mode +mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); + +try { + $mysqli->query("SELECT ( + SELECT 1 AS val + UNION ALL + SELECT 2 + ) FROM dual"); +} catch (mysqli_sql_exception $e) { + echo $e->getMessage()."\n"; +} + +$mysqli->query("SELECT ( + SELECT 1 AS val + UNION ALL + SELECT 2 +) FROM dual", MYSQLI_ASYNC); +try { + $mysqli->reap_async_query(); +} catch (mysqli_sql_exception $e) { + echo $e->getMessage()."\n"; +} + +$mysqli->real_query("SELECT ( + SELECT 1 AS val + UNION ALL + SELECT 2 +) FROM dual"); +try { + $result = new mysqli_result($mysqli); +} catch (mysqli_sql_exception $e) { + echo $e->getMessage()."\n"; +} + +print "done!"; +?> +--EXPECTF-- +Subquery returns more than 1 row +Subquery returns more than 1 row +Subquery returns more than 1 row +done!