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ā)布的文章中找到此類文件的示例(我順便寫了一個鏈接)。
請注意,堆棧跟蹤往往會變得非常大,并且會嚴重破壞您的日志。因此,請考慮將擴展輸出設為可選。

TA貢獻1827條經(jīng)驗 獲得超4個贊
如果您試圖了解先前執(zhí)行的查詢,一種可能的解決方案是將您的 SQL 存儲在單個變量中并為每個語句更改它。然后,如果查詢發(fā)生錯誤,您只需回顯變量的內(nèi)容即可。除非有特定原因,否則您需要有多個變量來保存您的查詢。
- 2 回答
- 0 關注
- 171 瀏覽
添加回答
舉報