PHP何时连接到数据库?

时间:2018-10-16 13:57:08

标签: php mysql mysqli

PHP何时连接到数据库?例如:

This Poste Code belongs to {{relatedLabel}} area.

在启动mysqli类时,是在php连接时还是仅在调用该类时:

$db = new mysqli('host', 'user', 'password', 'database');

我想知道是否编写这样的行,php是否尝试连接还是要等到调用$stmt->execute(); 为止:

$stmt->execute();

1 个答案:

答案 0 :(得分:3)

以下是您的脚本的细分:

$db = new mysqli('host', 'user', 'password', 'database');

这将使用凭据hostuser以及数据库模式passworddatabase建立与数据库的 new 连接。相比之下

$db = new mysqli('p:host', 'user', 'password', 'database');

将尝试重用可用连接(source)

中的现有连接

物理TCP套接字保持活动状态,直到调用mysqli->close或脚本终止为止。您可以通过执行以下操作确认这是实际行为:

$db = new mysqli('host', 'user', 'password', 'database');
sleep(1000);

,然后在您的MySQL数据库上运行show processlist,以确认与数据库存在物理连接,该连接可能处于活动状态或睡眠状态,但物理链接将存在并且端口正在使用中。

$stmt = $db->prepare("SELECT fname, lname WHERE id =?");

将向MySQL服务器发送请求以准备该语句,您将获得对准备好的语句的引用。请注意,除非使用PDO并模拟Prepare,否则准备语句是在数据库服务器上发生的事情。

$stmt->execute();

将执行先前准备的语句。这再次在数据库服务器上发生,并且结果资源被打开,可用于检索结果。请注意,与PDO不同,在MySQLi中,语句资源既充当语句又充当结果,并且将用作检索结果集(作为流或一次全部检索)的内容。您必须先关闭该语句或以其他方式处置该语句,然后才能在同一链接上执行另一条语句。这就是为什么您需要执行此操作时可以致电$stmt->close()的原因。

要关闭连接,您需要运行$db->close()或等待脚本终止。请注意,如果您使用的是持久连接,则不会关闭物理链接,而是将其返回到连接池中,并可以重新使用。池是必需的,因为并发用户不应共享相同的物理链接。