PHP何时连接到数据库?例如:
This Poste Code belongs to {{relatedLabel}} area.
在启动mysqli类时,是在php连接时还是仅在调用该类时:
$db = new mysqli('host', 'user', 'password', 'database');
我想知道是否编写这样的行,php是否尝试连接还是要等到调用$stmt->execute();
为止:
$stmt->execute();
答案 0 :(得分:3)
以下是您的脚本的细分:
$db = new mysqli('host', 'user', 'password', 'database');
这将使用凭据host
和user
以及数据库模式password
在database
建立与数据库的 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()
或等待脚本终止。请注意,如果您使用的是持久连接,则不会关闭物理链接,而是将其返回到连接池中,并可以重新使用。池是必需的,因为并发用户不应共享相同的物理链接。