2

我正在调用 Db::getInstance()->execute() 进行插入和更新以及选择查询 Db::getInstance()->executeS() 在此之后我们需要关闭数据库连接或 prestashop 本身关闭/处理数据库连接。

我们将如何检查 prestahsop 中数据库的连接是否长时间打开?我们的服务器管理员说我们的数据库会话正在增加,因为我们没有关闭连接。

任何专家 prestahsop 你能解释一下 PrestaShop 如何关闭连接还是我们需要手动关闭它?

 Db::getInstance()->execute()

对于我们创建的某些 cronjob 文件,我们所做的是包含如下所示的配置文件: require 'config/config.inc.php';

    $db = Db::getInstance();
     $result = $db->executeS($get_promotions_sql, false);   
     while ($row = $db->nextRow($result)) {
       $id_product=$row['id_product'];
       $name="<br>".$row['name'];
       }

这会使我的数据库连接永远打开吗?还是会被prestashop中的getInstance函数关闭/或处理

4

2 回答 2

2

您不应该关闭数据库连接,PrestaShop 会自动处理。您也可以通过调用以下代码手动断开连接:

Db::getInstance()->disconnect();

如果您在商店中遇到性能问题,那么您可以启用 PrestaShop Code Profiler 并查看哪些对象实例正在使用您的服务器内存。

为了启用 PrestaShop Code Profiler,您需要按照以下步骤操作:

  • 在您的服务器上,编辑文件 /config/defines.inc.php。

  • 找到这一行(第 43 行附近):define('_PS_DEBUG_PROFILING_',
    false);

  • 在这一行中,将“false”更改为“true”。

  • 保存您的更改。

于 2016-11-07T14:45:20.570 回答
1

看着Db课...

/**
 * Close connection to database
 */
public function __destruct()
{
    if ($this->link)
        $this->disconnect();
}

调用析构函数时将关闭与数据库的连接。

我可以信任调用 PHP __destruct() 方法吗?

调用构造函数时建立连接。所以不,您不需要手动打开/关闭与数据库的连接。

于 2016-11-06T13:03:31.293 回答