PHP Mysqli 数据库连接池以避免最大用户数
PHP Mysqli database connection pooling to avoid maximum user count
我这两天在网上冲浪PHP创建数据库池,但还没有实现。我正在使用 PHP 和 MySQLi。我们购买了最大用户连接数为 15 的 mysqli 数据库。我想汇集数据库连接以避免新连接。我使用了 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";
}
}
}
?>
但是上面的函数只有 returnselse 部分。请建议我如何处理这个问题。提前致谢。现在我正在终止处于睡眠模式的进程,以减少增加数据库连接的可能性。
这不是它的工作原理。参见 here。当你执行 new mysqli('p:...
连接时,MySQLi 会 select 一个可用连接,而不是 PHP 对象。
function getConnection(){
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
return (new mysqli('p:xxxx','yyy','zzz','aaaa'));
}
PHP 中没有连接池。
您尝试使用的持久连接("p:" 位)是达到最大连接数的最可靠方式,因此请立即摆脱它.
15 个并发连接实际上很多。简单地优化您的查询,因此一个典型的连接将持续 0.1 秒,这意味着 150 个并发执行的 PHP 脚本,相当于 1500 个在线用户。
此外,您需要添加
static $connect;
作为函数的第一行,或者每次调用时都会创建新连接,这就是您收到此错误的实际原因。
<?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 connect 的文章。
我这两天在网上冲浪PHP创建数据库池,但还没有实现。我正在使用 PHP 和 MySQLi。我们购买了最大用户连接数为 15 的 mysqli 数据库。我想汇集数据库连接以避免新连接。我使用了 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";
}
}
}
?>
但是上面的函数只有 returnselse 部分。请建议我如何处理这个问题。提前致谢。现在我正在终止处于睡眠模式的进程,以减少增加数据库连接的可能性。
这不是它的工作原理。参见 here。当你执行 new mysqli('p:...
连接时,MySQLi 会 select 一个可用连接,而不是 PHP 对象。
function getConnection(){
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
return (new mysqli('p:xxxx','yyy','zzz','aaaa'));
}
PHP 中没有连接池。
您尝试使用的持久连接("p:" 位)是达到最大连接数的最可靠方式,因此请立即摆脱它.
15 个并发连接实际上很多。简单地优化您的查询,因此一个典型的连接将持续 0.1 秒,这意味着 150 个并发执行的 PHP 脚本,相当于 1500 个在线用户。
此外,您需要添加
static $connect;
作为函数的第一行,或者每次调用时都会创建新连接,这就是您收到此错误的实际原因。
<?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 connect 的文章。