假设我正在使用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实例(与数据库的一个连接)
答案 0 :(得分:2)
是的,每次您的脚本运行时,它将建立与数据库的新连接并提出新的检索数据的请求。
即使您没有在脚本末尾关闭连接,但mysqli连接也会在其末尾被破坏,因此您不能“欺骗”它以使其保持打开状态或以cookie方式工作。说。
我的意思是这就是脚本要执行的操作。连接到数据库,完成工作,离开数据库(连接模具)。
另一方面,如果在同一脚本中您有2-3个或更多查询,则这是另一个故事,因为如上所述,mysqli的连接在脚本末尾消失,这意味着您建立了1个连接,然后运行您所有的脚本查询,然后您退出。
编辑以回答评论:
让我们假设我进入您的页面,而我的一个朋友同时来了(让我假设我说过)。我连接到您的数据库并请求一些数据,我的一个朋友也是如此。让我们看看过程:
我们俩都触发了一个后端脚本来为我们每个人运行。在此脚本中,创建了一个mysqli实例,因此我们目前有2个实例在运行,但有两个单独的用户。
这很有意义,让我详细说明一下:
想想您预订假期的页面。如果我想查看法国的门票价格,而又想查看英国的门票价格,则在运行的php脚本中,我们每个人都应该放一个where子句,如:
->where('destination','France');
之后,数据在前端发送,我能够看到我的要求。同时,当我查询数据库时,我的实例已死,得到了结果,没有其他事情要做。
此时将加入的每个用户也会遇到同样的情况。他/她将创建自己的实例,获取他想要获取的数据,然后让他的实例死亡。
最新编辑:
在阅读您的最新评论后,我直接弄清楚了您的问题所在。因此,正如我在帖子中提到的那样,不能在mysqli中创建用户的实例与任何其他用户共享。它是独特的。
如果流量很大,您可以做的是缓存数据。您可以使用出于这个原因而专门构建的Reddis数据库,需要对其进行大量查询,并且可以对其设置缓存,因此,如果需要,它会在一段时间后删除数据。