【问题标题】:When does PHP connect to the database?PHP 什么时候连接数据库?
【发布时间】:2018-10-16 13:57:07
【问题描述】:

PHP 什么时候连接到数据库?例如:

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

mysqli类启动的时候,是php连接的时候,还是只有this调用的时候:

$stmt->execute();

我想知道我是否写了这样的一行,php是否会尝试连接还是会等到$stmt->execute();被调用:

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

【问题讨论】:

    标签: php mysql mysqli


    【解决方案1】:

    以下是您的脚本的细分:

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

    这将使用凭据userpassword 以及数据库架构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() 或等待脚本终止。请注意,如果您使用的是持久连接,则物理链接不会关闭,而是返回到连接池并可供重复使用。池是必要的,因为并发用户不应共享相同的物理链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 2018-05-08
      • 2013-04-25
      • 2014-09-14
      • 1970-01-01
      • 2014-04-10
      相关资源
      最近更新 更多