- $max = intval($r[0]["Value"]);
- if ($max == 0)
- return false;
-
- $r = q("SHOW STATUS WHERE `variable_name` = 'Threads_connected'");
- if (!$r)
- return false;
+ // the maximum number of possible user connections can be a system variable
+ $r = q("SHOW VARIABLES WHERE `variable_name` = 'max_user_connections'");
+ if ($r)
+ $max = $r[0]["Value"];
+
+ // Or it can be granted. This overrides the system variable
+ $r = q("SHOW GRANTS");
+ if ($r)
+ foreach ($r AS $grants) {
+ $grant = array_pop($grants);
+ if (stristr($grant, "GRANT USAGE ON"))
+ if (preg_match("/WITH MAX_USER_CONNECTIONS (\d*)/", $grant, $match))
+ $max = $match[1];
+ }
+ }