如何检查 Opencart 3 中最后执行的查询
How to check last executed query in Opencart3
$data['module_status'] = $this->config->get('visit_module_enabled');
我需要检查在 $this->config->get 中执行了什么查询。
无论如何,就像代码 Igniter 有一个选项 $this->db->last_query() 一样,
我们在 Opencart3 中没有类似的东西吗?
如果这是原始的 Db 对象,那些真的是我们为 $this->db 对象提供的所有功能吗?
https://github.com/opencart/opencart/blob/master/upload/system/library/db.php
或者核心 PHP 或 mysql 中的某些实现可以达到同样的效果?
... just like code Igniter has an option $this->db->last_query()
, don't we have something similar in Opencart3 ?
不。 Opencart 不是一个框架(如 CodeIgniter)并且不提供强大的函数库。
If this is the original Db object, are those really all the functions we have for $this->db object?
是。
I need to check what query is executed in $this->config->get
这没有任何意义。 $this->config->get()
只是获取 config
class 的 $data
属性 的数组键的值。所有这些属性都在站点初始化时加载。其中大部分(不是全部)来自 controller/startup/startup.php
:
中的查询
SELECT * FROM `" . DB_PREFIX . "setting` WHERE store_id = '0' OR store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY store_id ASC
如果您想知道该特定值的来源,它很可能位于 setting
table 中,其中 key = 'visit_module_enabled'
.
如果您仍想创建一个 last_query()
方法,那将非常简单,但根据您的问题,我认为它不会满足您的需求。
要创建 last_query()
方法,您可以像这样修改 db
class:
private $last_query;
public function query($sql) {
$this->last_query = $sql;
return $this->adaptor->query($sql);
}
public function last_query() {
return $this->last_query;
}
这是一个 VQMOD xml 文件,用于记录 OpenCart 执行的 SQL 查询和执行的持续时间:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<id>SYSTEM MYSQLI DB LOG vQmod for OC 2.x</id>
<code>sculptex_mysqli_db_log</code>
<version>1.0</version>
<vqmver required="true">2.5.1</vqmver>
<author>Sculptex</author>
<file name="system/library/db/mysqli.php">
<operation>
<search position="after"><![CDATA[public function query($sql) {]]></search>
<add><![CDATA[
$logfile = DIR_LOGS."SQL_log.txt";
$starttime = microtime(true);
]]></add>
</operation>
<operation>
<search position="before"><![CDATA[return $result;]]></search>
<add><![CDATA[
$endtime = microtime(true);
$log = sprintf(date("Y-m-d H:i:s",time())." QUERY EXECUTED IN %0.4f - %s", $endtime-$starttime, $sql);
if(!file_exists($logfile)) { file_put_contents($logfile,''); }
$f = fopen($logfile, 'a');
fwrite($f, $log."\n");
fclose($f);
]]></add>
</operation>
</file>
</modification>
我不是这个 mod 的原作者,几年前在论坛上找到了它。据我所知,它适用于 OpenCart 3。
由于日志文件增长非常快,我会警告不要设置它并保留它。
$data['module_status'] = $this->config->get('visit_module_enabled');
我需要检查在 $this->config->get 中执行了什么查询。 无论如何,就像代码 Igniter 有一个选项 $this->db->last_query() 一样, 我们在 Opencart3 中没有类似的东西吗?
如果这是原始的 Db 对象,那些真的是我们为 $this->db 对象提供的所有功能吗? https://github.com/opencart/opencart/blob/master/upload/system/library/db.php
或者核心 PHP 或 mysql 中的某些实现可以达到同样的效果?
... just like code Igniter has an option
$this->db->last_query()
, don't we have something similar in Opencart3 ?
不。 Opencart 不是一个框架(如 CodeIgniter)并且不提供强大的函数库。
If this is the original Db object, are those really all the functions we have for $this->db object?
是。
I need to check what query is executed in $this->config->get
这没有任何意义。 $this->config->get()
只是获取 config
class 的 $data
属性 的数组键的值。所有这些属性都在站点初始化时加载。其中大部分(不是全部)来自 controller/startup/startup.php
:
SELECT * FROM `" . DB_PREFIX . "setting` WHERE store_id = '0' OR store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY store_id ASC
如果您想知道该特定值的来源,它很可能位于 setting
table 中,其中 key = 'visit_module_enabled'
.
如果您仍想创建一个 last_query()
方法,那将非常简单,但根据您的问题,我认为它不会满足您的需求。
要创建 last_query()
方法,您可以像这样修改 db
class:
private $last_query;
public function query($sql) {
$this->last_query = $sql;
return $this->adaptor->query($sql);
}
public function last_query() {
return $this->last_query;
}
这是一个 VQMOD xml 文件,用于记录 OpenCart 执行的 SQL 查询和执行的持续时间:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<id>SYSTEM MYSQLI DB LOG vQmod for OC 2.x</id>
<code>sculptex_mysqli_db_log</code>
<version>1.0</version>
<vqmver required="true">2.5.1</vqmver>
<author>Sculptex</author>
<file name="system/library/db/mysqli.php">
<operation>
<search position="after"><![CDATA[public function query($sql) {]]></search>
<add><![CDATA[
$logfile = DIR_LOGS."SQL_log.txt";
$starttime = microtime(true);
]]></add>
</operation>
<operation>
<search position="before"><![CDATA[return $result;]]></search>
<add><![CDATA[
$endtime = microtime(true);
$log = sprintf(date("Y-m-d H:i:s",time())." QUERY EXECUTED IN %0.4f - %s", $endtime-$starttime, $sql);
if(!file_exists($logfile)) { file_put_contents($logfile,''); }
$f = fopen($logfile, 'a');
fwrite($f, $log."\n");
fclose($f);
]]></add>
</operation>
</file>
</modification>
我不是这个 mod 的原作者,几年前在论坛上找到了它。据我所知,它适用于 OpenCart 3。
由于日志文件增长非常快,我会警告不要设置它并保留它。