PHP RESTAPI MySQL数据库多个连接

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (99)

我在php上有一个数据库类,它在启动时连接到数据库,用于执行查询,并通过RestAPI请求从数据库返回数据。这里遇到的问题是,每次用户发出HTTP请求时,都会启动新的数据库类,并在用户使用RestAPI完成的每个查询上建立新的连接。

数据库类如下所示:

<?php
class DbHandler
{
    private $conn;
    function __construct()
    {
        require_once dirname(__FILE__) . '/db_connect.php';
        $db         = new DbConnect();
        $this->conn = $db->connect();
    }

    public function getSpotlight($user_id) {
      $stmt = $this->conn->prepare("SELECT *, (SELECT COUNT(*) FROM followers WHERE following = u.id) as followers, (SELECT COUNT(*) FROM posts WHERE user_id = u.id) as totalPosts from users u WHERE u.id NOT IN (select if(user_id = :var1, user_with, user_id) from friends where user_id = :var1 OR user_with = :var1) AND u.id != :var1 order by followers desc limit 10;");
      $stmt->bindParam(":var1", $user_id);
      $stmt->execute();
      $users = $stmt;
      $stmt  = null;
      return $users;
    }

DbConnect看起来如下:

<?php
class DbConnect
{
    private $conn;
    function __construct()
    {
    }

    function connect()
    {
        include_once dirname(__FILE__) . '/config.php';
        $host       = DB_HOST;
        $db_name    = DB_NAME;
        $user       = DB_USERNAME;
        $pass       = DB_PASSWORD;
        $this->conn = new PDO("mysql:host=$host;dbname=$db_name", $user, $pass);
        if (mysqli_connect_errno()) {
            echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }
        return $this->conn;
    }
}
?>

因此,基本上现在,当用户调用index.php时,启动一个新的数据库类,每次查询完成时,都会建立一个新的连接,每次请求完成后,它都会关闭。

这不是一个问题,直到我们有超过1000个用户,每次它增加响应时间,我检查了MySQL上的进程列表,连接在增加和退出,新的连接正在到来。

我不知道这个问题的解决办法是什么。是否有任何方法使它在这个DbHandler文件上保持连接?或者在PHP中有其他方法可以实现。愿意听取这个问题的解决方案。

提问于
用户回答回答于

网站有10,000名在线访问者,动态页面必须在每次加载页面时向数据库或Web服务发送10,000倍相同的查询。\使用phpFastCache,页面只向DB/WS发送一个查询,并使用缓存为9,999名其他访问者提供服务。显然可以决定适合需要的TTL。

扫码关注云+社区

领取腾讯云代金券