2013-12-17 125 views
5

我已經閱讀了幾篇關於這個問題的文章,但是他們沒有一篇幫助我,我有點困惑該怎麼做。檢查mysqli查詢是否成功的正確方法

基本上,我想檢查sql查詢是否執行沒有任何錯誤。要做到這一點,我必須使用下面顯示的if兩個語句嗎?

if($stmt = $mysqli->prepare("INSERT INTO table VALUES (?, ?, ?);")) 
{ 
    $stmt->bind_param("sss", $a, $b, $c); 

    if(!$stmt->execute()) 
    { 
     // Do I have to catch the problem here? 
    } 

    if($stmt->affected_rows === -1){ 
     // Do I have to catch the problem here? 
    } 

    $stmt->close(); 
} 
else 
{ 
    // Do I need to catch the problem here? 
} 
+0

*爲什麼*要檢查結果?你打算怎麼處理它? –

+0

我只需要知道數據是否被保存(在這種情況下),如果不是因爲發生了什麼事情,我需要知道並通知用戶這個問題... – 0101

+0

如果你的問題不是與mysqli但是 - 比如說 - 與內存有關?要寫另一個通知?怎麼樣的文件系統錯誤,除零,缺少變量? –

回答

1

您應該檢查的prepare()bind_param()和​​的返回值。如果他們失敗,他們都會返回false

如果​​不返回false那麼INSERT應該已經通過了成功,如果你想知道多少行受到了影響,因此檢查affected_rows纔有意義。

0
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); 

把這條線放在mysqli connect上面。這是你需要的。

要通知用戶問題,請檢查AJAX請求的響應狀態。如果它是500 - 那麼保存有問題。

+0

謝謝,但我還有一個問題。如果這對我來說還不夠,我想提出一些報告,我的意思是,例如發送郵件給我自己關於特定的錯誤。在這種情況下哪個選項最好? – 0101

+0

你能提供一個*真實*的情況嗎?所以我可以告訴你最合適的選擇。發送電子郵件的情況下,一個特定的mysql錯誤似乎對我來說太虛假了。 –

+0

如果在某些塊中發生了錯誤(當前存在評論,如上所示)我想從該地點發送例如電子郵件或重定向到另一個網站。現在我在想什麼是最好的辦法。我必須在那些地方捕捉所有可能的錯誤,或者使用try {} catch(){}? – 0101