當前位置: 首頁> 最新文章列表> 如何用mysqli::$info函數實現對SQL執行狀態的實時監控?

如何用mysqli::$info函數實現對SQL執行狀態的實時監控?

gitbox 2025-09-30

在開發PHP應用程序時,監控SQL查詢的執行狀態對於調試和優化性能至關重要。 mysqli擴展為我們提供了多種方法來與MySQL數據庫進行交互,其中mysqli::$info函數便是一個用於獲取關於最後執行的SQL查詢的詳細信息的強大工具。本文將介紹如何利用mysqli::$info函數實時監控SQL執行狀態。

一、什麼是mysqli::$info函數?

mysqli::$info是一個PHP mysqli類的屬性,它提供了與數據庫交互的詳細信息,尤其是在執行查詢之後。通過該屬性,開發者可以獲取SQL語句執行的狀態,包括受影響的行數、警告信息等。

該屬性主要用於以下幾種場景:

  • 獲取SQL查詢執行後的統計信息

  • 查看SQL執行過程中是否有警告

  • 獲取受影響的行數(例如,在更新、刪除操作後)

二、如何使用mysqli::$info函數?

mysqli::$info是一個只讀屬性,返回的是與執行最後一條SQL語句相關的消息。其基本的使用方式如下:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 創建數據庫連接</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database_name"</span></span><span>);

</span><span><span class="hljs-comment">// 檢查連接是否成功</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"連接失敗: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// 執行SQL查詢</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"UPDATE users SET status = 'active' WHERE last_login &gt; '2025-01-01'"</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>) === </span><span><span class="hljs-literal">TRUE</span></span><span>) {
    </span><span><span class="hljs-comment">// 輸出SQL執行状态</span></span><span>
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"SQL執行成功: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;info;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"SQL執行失败: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error;
}

</span><span><span class="hljs-comment">// 關閉連接</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在上面的例子中,當我們執行UPDATE語句後,可以通過$mysqli->info獲取SQL執行的詳細信息。如果SQL執行成功,它會返回一條關於受影響行數的信息。如果SQL執行失敗,它則會輸出錯誤信息。

三、mysqli::$info函數的常見返回值

mysqli::$info的返回值通常包含以下內容:

  • 受影響的行數:例如,對於INSERTUPDATEDELETE等操作, mysqli::$info會返回影響的行數。

  • 警告數量:如果在執行SQL時發生了警告,返回的內容可能會顯示警告數量。

  • 其他查詢信息:對於特定的查詢, mysqli::$info可能還會返回其他執行信息。

舉個例子

 <span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"UPDATE users SET status = 'active' WHERE last_login &gt; '2025-01-01'"</span></span><span>;
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;info; </span><span><span class="hljs-comment">// 返回:Records updated: 50</span></span><span>
</span></span>

在這個例子中, mysqli::$info會返回一條信息,說明有50條記錄被更新。

四、使用mysqli::$info進行實時監控

為了實現對SQL執行狀態的實時監控,我們可以通過mysqli::$info不斷地獲取查詢信息,並在每次執行SQL操作後進行檢查。這種方式尤其適合用於開發階段的調試或性能分析。

例如,我們可以在批量執行多個SQL查詢時,通過記錄每次查詢後mysqli::$info的返回值來監控每個操作的效果:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$queries</span></span><span> = [
    </span><span><span class="hljs-string">"INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]')"</span></span><span>,
    </span><span><span class="hljs-string">"UPDATE users SET status = 'inactive' WHERE last_login &lt; '2024-01-01'"</span></span><span>,
    </span><span><span class="hljs-string">"DELETE FROM users WHERE id = 101"</span></span><span>
];

</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$queries</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$query</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>)) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"查詢執行成功: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;info . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
    } </span><span><span class="hljs-keyword">else</span></span><span> {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"查詢執行失败: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error . </span><span><span class="hljs-string">"&lt;br&gt;"</span></span><span>;
    }
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

在這個例子中,每當我們執行一個查詢時,都會立即通過$mysqli->info來輸出當前SQL語句的執行狀態。這對於批量操作或者復雜的事務處理非常有幫助,可以幫助我們實時監控執行的效果。

五、注意事項

  1. 僅適用於最後一條SQL語句mysqli::$info僅能提供關於最後執行SQL語句的反饋。如果你在同一個腳本中執行多個查詢,它只會返回最後一個查詢的執行信息。

  2. 數據庫連接問題:如果數據庫連接出現問題, mysqli::$info可能不會返回有效的信息,因此在使用時應確保數據庫連接正常。

  3. 錯誤與警告mysqli::$info主要用於獲取執行的概況,如果你需要詳細的錯誤信息,應該使用mysqli::$error屬性。

六、總結

mysqli::$info是一個非常實用的屬性,它可以幫助開發者實時監控SQL查詢的執行狀態。通過使用這個屬性,可以在執行SQL操作後獲得執行的詳細信息,進而幫助開發者更好地調試和優化代碼。特別是在復雜的數據庫操作和批量查詢中, mysqli::$info能夠提供關鍵的反饋信息,幫助開發者做出相應的調整。

如果你正在構建一個需要頻繁執行SQL操作的PHP應用,結合mysqli::$info進行實時監控將極大地提高你調試和優化的效率。