以下是您的脚本的细分:
$db = new mysqli('host', 'user', 'password', 'database');
这将使用凭据user 和password 以及数据库架构database 创建到host 的数据库的新 连接。相比之下
$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 和模拟准备,否则准备语句是在数据库服务器上发生的事情。
$stmt->execute();
将执行之前准备好的语句。这再次发生在数据库服务器上,结果资源被打开,可用于检索结果。请注意,与 PDO 不同,在 MySQLi 中,语句资源既充当语句又充当结果,并且您将使用它来检索结果集(作为流或一次全部)。在您可以在同一链接上执行另一条语句之前,该语句需要关闭或以其他方式处置。这就是为什么您可以在需要时致电$stmt->close()。
要关闭连接,您需要运行$db->close() 或等待脚本终止。请注意,如果您使用的是持久连接,则物理链接不会关闭,而是返回到连接池并可供重复使用。池是必要的,因为并发用户不应共享相同的物理链接。