我在互联网上浏览了两天,创建了PHP数据库池,但尚未实现。我使用的是PHP和MySQLi。我们购买了mysqli db与15个最大的用户连接。我希望将db连接集中起来,以避免新连接。我使用persistent和mysqli_connect。但是我并不觉得这两个用户都创建了新的连接,因为其他用户已经登录了。我正在尝试这个函数以获得DB连接。
<?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连接的可能性。
发布于 2019-11-04 11:58:47
PHP中没有连接池。
您试图使用的持久连接( "p:“位)是最确定的达到最大连接号的方式,因此立即摆脱它。
15个并发连接,实际上是很多。简单地优化您的查询,这样一个典型的连接将持续0.1秒,这意味着150个并发执行的PHP脚本,相当于1500个在线用户。
另外,您还需要添加
static $connect;作为函数中的第一行,或is将在每次调用它时创建新连接,这就是您获得此错误的实际原因。
<?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连接的文章。
发布于 2019-08-09 12:55:19
这不是它的工作方式。见这里。MySQLi将在执行new mysqli('p:...时选择一个可用的连接--连接是持久的,而不是new mysqli('p:...对象。
function getConnection(){
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
return (new mysqli('p:xxxx','yyy','zzz','aaaa'));
}https://stackoverflow.com/questions/57429589
复制相似问题