第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲取在 PHP 中發(fā)生異常之前執(zhí)行的最后一個 mysqli 查詢?

如何獲取在 PHP 中發(fā)生異常之前執(zhí)行的最后一個 mysqli 查詢?

PHP
楊__羊羊 2023-04-28 15:12:37
這是一些示例代碼:try{   $db->query($sql_q1);   $db->query($sql_q2);   $db->query($sql_q3);}catch (Exception $e) {   echo $e->getMessage();}我如何才能看到哪個查詢導致了錯誤,catch以便我可以看到它以及錯誤消息?行號對我不起作用,因為我的查詢通常是動態(tài)構(gòu)建的。
查看完整描述

2 回答

?
滄海一幻覺

TA貢獻1824條經(jīng)驗 獲得超5個贊

如果你不抓住它,就會有比你抓住更多的信息。只需嘗試從您的代碼中刪除這些try..catch內(nèi)容,您就會看到查詢的前 15 個字符。


但是如果你需要整個查詢,有一種方法,雖然它不會馬上給你,就像一個包含專門“最后執(zhí)行的查詢”的指定變量,但從技術上講你可以


有一種叫做stack trace 的東西,用于確切的目的。它可以向您顯示代碼中導致錯誤的所有調(diào)用,包括所有函數(shù)參數(shù)。


將您的代碼更改為此


try

{

? ?$db->query($sql_q1);

? ?$db->query($sql_q2);

? ?$db->query($sql_q3);

}

catch (Exception $e)?

{

? ?var_dump($e->getTrace());

? ?// or to get the full error info, just

? ?var_dump($e);

}

并且您將看到您的查詢完全光榮,但如果這是您的目標,自動獲取實際查詢將是一件非常痛苦的事情。但是如果你只想記錄/目視檢查錯誤信息,它就可以了。


顯然你不應該在任何現(xiàn)實生活中的代碼中將 var_dump() 放在 try_catch() 中。相反,必須將一些處理代碼放入您的錯誤處理程序中。特別是如果您的目的是調(diào)試。因此,您的現(xiàn)實生活代碼應該是這樣的


// somewhere in the bootstrap

include 'error_handler.php';


// anywhere in your code

$db->query($sql_q1);

$db->query($sql_q2);

$db->query($sql_q3);

在 error_handler.php 中,您可以添加代碼來打印完整的堆棧跟蹤。您可以在 Usman Munir 發(fā)布的文章中找到此類文件的示例(我順便寫了一個鏈接)。


請注意,堆棧跟蹤往往會變得非常大,并且會嚴重破壞您的日志。因此,請考慮將擴展輸出設為可選。


查看完整回答
反對 回復 2023-04-28
?
GCT1015

TA貢獻1827條經(jīng)驗 獲得超4個贊

如果您試圖了解先前執(zhí)行的查詢,一種可能的解決方案是將您的 SQL 存儲在單個變量中并為每個語句更改它。然后,如果查詢發(fā)生錯誤,您只需回顯變量的內(nèi)容即可。除非有特定原因,否則您需要有多個變量來保存您的查詢。



查看完整回答
反對 回復 2023-04-28
  • 2 回答
  • 0 關注
  • 171 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號