You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移动端APP经PHP连接MySQL触发max_connections_per_hour错误求解决方案

解决方案:MySQL用户超出每小时连接数限制及代码优化

一、解决max_connections_per_hour限制的核心方案

  • 调整MySQL用户资源配额:直接修改该数据库用户的每小时连接数上限,根据业务流量设置合理值,或者设为0解除限制。执行以下SQL命令(替换实际用户名和主机):
    ALTER USER 'xxxxx'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 2000;
    -- 设为0表示无限制:ALTER USER 'xxxxx'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 0;
    
  • 使用数据库持久连接:将MySQLi连接改为持久连接,复用已有的数据库连接,减少新连接的创建次数。修改连接代码:
    // 在主机名前加p:启用持久连接
    $conn = new mysqli('p:' . DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
    
    注意:持久连接需配合服务器配置(如php.ini的mysqli.allow_persistent开启),且不能在连接中保留会话状态(如未提交的事务)。
  • 显式关闭数据库连接:在请求处理完成后主动关闭连接,避免闲置连接占用配额。在switch语句结束后添加:
    $conn->close();
    

二、修复代码中的严重问题

你的代码存在语法错误、SQL注入风险等问题,需同步修复:

  • 替换中文引号:代码中所有中文引号(如“get name”、‘xy’z)替换为英文引号,否则会触发语法错误。
  • 杜绝SQL注入:不能直接将用户输入的$custid拼接到SQL语句中,必须使用预处理语句。以get name分支为例,修改后代码:
    case "get name":
        $sql = "INSERT INTO xxx (CustomerID, xyz) VALUES (?, ?)";
        $stmt = $conn->prepare($sql);
        // 假设$custid是整数(i),第二个参数是字符串(s),根据实际类型调整
        $stmt->bind_param("is", $custid, 'xyz');
        $stmt->execute();
        $stmt->close();
        break;
    
  • 移除调试代码:生产环境中删除echo $sql;,避免泄露敏感SQL信息。
  • 优化错误处理:不要直接将数据库错误信息返回给客户端,改为记录日志并返回通用提示:
    if ($conn->connect_error) {
        error_log("DB Connection failed: " . $conn->connect_error);
        die("Server error");
    }
    

内容的提问来源于stack exchange,提问作者waleed.makarem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:05:26