使用mysqli时,是否每次都建立新连接?

时间:2018-11-21 09:12:33

标签: php laravel

假设我正在使用mysqli和纯PHP。我要写伪代码。

在config.php中

$msql = new mysqli("username","password","dbname");
$msql->connect();

在app.php中

include "config.php";

$row = mysqli_select("select * from posts");
foreach($row as $r){
 var_dump($r);
}

1)问题是:每次用户提出请求或访问mywebsite.com/app.php上的网页时,每次创建新的mysql实例而旧的mysql实例被销毁?或者根本就只有一个mysql实例(与数据库的一个连接)

1 个答案:

答案 0 :(得分:2)

是的,每次您的脚本运行时,它将建立与数据库的新连接并提出新的检索数据的请求。

即使您没有在脚本末尾关闭连接,但mysqli连接也会在其末尾被破坏,因此您不能“欺骗”它以使其保持打开状态或以cookie方式工作。说。

我的意思是这就是脚本要执行的操作。连接到数据库,完成工作,离开数据库(连接模具)。

另一方面,如果在同一脚本中您有2-3个或更多查询,则这是另一个故事,因为如上所述,mysqli的连接在脚本末尾消失,这意味着您建立了1个连接,然后运行您所有的脚本查询,然后您退出。

编辑以回答评论:

让我们假设我进入您的页面,而我的一个朋友同时来了(让我假设我说过)。我连接到您的数据库并请求一些数据,我的一个朋友也是如此。让我们看看过程:

我们俩都触发了一个后端脚本来为我们每个人运行。在此脚本中,创建了一个mysqli实例,因此我们目前有2个实例在运行,但有两个单独的用户。

这很有意义,让我详细说明一下:

想想您预订假期的页面。如果我想查看法国的门票价格,而又想查看英国的门票价格,则在运行的php脚本中,我们每个人都应该放一个where子句,如:

->where('destination','France');

之后,数据在前端发送,我能够看到我的要求。同时,当我查询数据库时,我的实例已死,得到了结果,没有其他事情要做。

此时将加入的每个用户也会遇到同样的情况。他/她将创建自己的实例,获取他想要获取的数据,然后让他的实例死亡。

最新编辑:

在阅读您的最新评论后,我直接弄清楚了您的问题所在。因此,正如我在帖子中提到的那样,不能在mysqli中创建用户的实例与任何其他用户共享。它是独特的。

如果流量很大,您可以做的是缓存数据。您可以使用出于这个原因而专门构建的Reddis数据库,需要对其进行大量查询,并且可以对其设置缓存,因此,如果需要,它会在一段时间后删除数据。