- 開始。
- HTTP 請求。
- 執行 SQL 查詢。
- HTTP 回應。
我想獲取請求和回應之間的查詢(多少查詢和原始 SQL 查詢)。
->getLastQuery()
僅回傳 1 個最后一個查詢。我想保存發送 HTTP 請求和接收 HTTP 回應之間的所有查詢。
我失敗的例子;
<?php
class Logger implements FilterInterface
{
use ResponseTrait;
public function before(RequestInterface $request, $arguments = null)
{
}
public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
{
$this->db = \Config\Database::connect();
$this->db->getLastQuery()->getOriginalQuery();
if ($this->db->getLastQuery()->isWriteType()) {
echo "updated or write query";
}
$return = $this->db->getLastQuery()->getOriginalQuery();
$logger = new Client();
$logger->logQueries($return);
}
}
uj5u.com熱心網友回復:
解釋
嘗試使用除錯工具列。除錯工具列提供有關當前頁面請求的概覽資訊,包括基準測驗結果、已運行的查詢、請求和回應資料等。
或者,您可以通過訂閱DBQuery
事件來執行您的應用程式。這可以通過向app/Config/Events.php
類注冊來讓它知道您想要在觸發該事件時執行一個動作來完成。
定義事件
大多數事件都在
app/Config/Events.php
檔案中定義。Events
您可以使用類的on()
方法將操作訂閱到事件。第一個引數是要訂閱的事件的名稱。第二個引數是觸發該事件時將運行的可呼叫物件:
<?php use CodeIgniter\Events\Events; Events::on('pre_system', ['MyClass', 'myFunction']);
在此示例中,每當執行 pre_system 事件時,都會
MyClass
創建一個實體并運行該myFunction()
方法。請注意,第二個引數可以是 PHP 識別的任何形式的可呼叫物件:<?php // Call a standalone function Events::on('pre_system', 'some_function'); // Call on an instance method $user = new User(); Events::on('pre_system', [$user, 'someMethod']); // Call on a static method Events::on('pre_system', 'SomeClass::someMethod'); // Use a Closure Events::on('pre_system', static function (...$params) { // ... });
解決方案
在您的app/Config/Events.php
班級中,訂閱該DBQuery
活動。
DBQuery
-:在資料庫查詢成功與否之后呼叫。接收\CodeIgniter\Database\Query
物件。-活動積分
Events::on("DBQuery", static function (\CodeIgniter\Database\Query $query) {
// Add your SQL query logging logic here. I.e:
log_message("error", $query->getQuery());
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/533149.html