diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 98a3475fc55..bb8a130c41f 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -620,8 +620,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; } diff --git a/ext/mysqli/tests/gh9841.phpt b/ext/mysqli/tests/gh9841.phpt new file mode 100644 index 00000000000..28d720aa6e9 --- /dev/null +++ b/ext/mysqli/tests/gh9841.phpt @@ -0,0 +1,79 @@ +--TEST-- +Bug GH-9841 (mysqli_query throws warning despite using silenced error mode) +--EXTENSIONS-- +mysqli +--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! diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c index 360f3766752..30d7415d885 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.c +++ b/ext/mysqlnd/mysqlnd_wireprotocol.c @@ -301,6 +301,7 @@ mysqlnd_read_packet_header_and_body(MYSQLND_PACKET_HEADER * packet_header, if (buf_size < packet_header->size) { DBG_ERR_FMT("Packet buffer %zu wasn't big enough %zu, %zu bytes will be unread", buf_size, packet_header->size, packet_header->size - buf_size); + SET_CLIENT_ERROR(error_info, CR_INVALID_BUFFER_USE, UNKNOWN_SQLSTATE, "Packet buffer wasn't big enough; as a workaround consider increasing value of net_cmd_buffer_size"); DBG_RETURN(FAIL); } if (FAIL == pfc->data->m.receive(pfc, vio, buf, packet_header->size, stats, error_info)) {