首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Mysqli数据库连接池,以避免最大用户计数

问PHP Mysqli数据库连接池,以避免最大用户计数
EN

Stack Overflow用户
提问于 2019-08-09 11:57:34
回答 2查看 1.5K关注 0票数 0

我在互联网上浏览了两天,创建了PHP数据库池,但尚未实现。我使用的是PHP和MySQLi。我们购买了mysqli db与15个最大的用户连接。我希望将db连接集中起来,以避免新连接。我使用persistent和mysqli_connect。但是我并不觉得这两个用户都创建了新的连接,因为其他用户已经登录了。我正在尝试这个函数以获得DB连接。

代码语言:javascript
复制
 <?php
function getConnection(){
    if ($connect){
        return $connect;
    }else{
        $connect = new mysqli('p:xxxx','yyy','zzz','aaaa');
        return $connect;
        if(mysqli_connect_errno($connect))
        {
            echo "Server Busy";
        }
    }
}
 ?>

但是上面的函数只返回其他部分。请建议我如何处理这件事。提前谢谢。现在,我正在关闭处于睡眠模式的进程,以降低增加DB连接的可能性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-04 11:58:47

PHP中没有连接池。

您试图使用的持久连接( "p:“位)是最确定的达到最大连接号的方式,因此立即摆脱它。

15个并发连接,实际上是很多。简单地优化您的查询,这样一个典型的连接将持续0.1秒,这意味着150个并发执行的PHP脚本,相当于1500个在线用户。

另外,您还需要添加

代码语言:javascript
复制
static $connect;

作为函数中的第一行,或is将在每次调用它时创建新连接,这就是您获得此错误的实际原因。

代码语言:javascript
复制
<?php
function getConnection(){
    static $connect;

    if (!$connect){
        mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        $connect = new mysqli('xxxx','yyy','zzz','aaaa');
        $connect->set_charset('utf8mb4');
    }
    return $connect;
}

更好的是,完全摆脱这个函数,在mysql连接代码中有一个单独的文件,然后在代码周围使用$connect变量。有关详细信息,请参阅我关于mysqli连接的文章。

票数 2
EN

Stack Overflow用户

发布于 2019-08-09 12:55:19

这不是它的工作方式。见这里。MySQLi将在执行new mysqli('p:...时选择一个可用的连接--连接是持久的,而不是new mysqli('p:...对象。

代码语言:javascript
复制
function getConnection(){
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    return (new mysqli('p:xxxx','yyy','zzz','aaaa'));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57429589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档