2011-05-10 109 views
4

我不想繼續執行「死()」時,它僅涉及腳本的一小部分,我想:處理錯誤,並在PHP腳本

$result = mysql_query($sql) or echo("error with responses"); 

但它產生的錯誤。如何發佈錯誤消息並繼續執行腳本的其餘部分,因爲即使連接失敗,其餘部分也不應受到影響。

+4

問題標題幾乎給了我一個動脈瘤。 – Charles 2011-05-10 20:39:14

+0

看,現在這是一個獲得觀點/迴應的標題。通常只有一個致命的錯誤(通常是語法錯誤等)應該殺死一個腳本。你得到的具體錯誤信息是什麼? – Wige 2011-05-10 20:41:53

+0

實際上,這很有趣,我看了問題列表後沒有注意到我的標題,然後問我。大聲笑我不想因爲mysql錯誤而終止腳本。我想繼續執行腳本的其餘部分,即使它無法從db中獲取數據。 – netrox 2011-05-10 20:47:38

回答

5
$result = mysql_query($sql); 
if(mysql_error()) { 
    echo "Error: " . mysql_error(); 
} 
+0

謝謝,那就是我一直在尋找的! – netrox 2011-05-10 20:44:26

+0

@netrox所以接受這個答案,你的接受比例會更高。 – 2011-05-10 20:46:23

+0

即時消息等待10分鐘過期:/ – netrox 2011-05-10 20:48:13

5

根據您的原始問題標題 - 你不能。 dieexit的目的是終止腳本處理。如果您不想終止腳本處理,請不要撥打dieexit

在抑制錯誤輸出方面,可以使用error control operator@),但這是可取的。 (您必須檢查錯誤狀態自己,如果你抑制這樣的錯誤。)

例如,你可以使用:

$result = @mysql_query($sql); 
if(is_resource($result)) { 
    // The query worked... 

} 
else { 
    // Handle error state, perhaps using mysql_error 
} 

然而,就表明這一點,從不隨便添加錯誤抑制器到函數調用。你必須確保你自己正確地處理任何潛在的錯誤。

1

檢查返回類型的mysql_query

$result = mysql_query($sql); 
if ($result===false) { 

echo 'The Query failed'; 
} 

//> Continue 
0

您可以關閉錯誤報告,要在生產環境中做的反正。

error_reporting(0); 

它仍然會拋出錯誤,但不會再顯示。

雖然這是非常不尋常的。我想不出爲什麼要接受一個mySQL錯誤的原因 - 如果問題是SQL被破壞,你通常會事先收到它。

+0

MySQL錯誤可能很好 - 例如,如果出現重複密鑰錯誤,則會向用戶顯示一條消息,指出其用戶名/ URL /任何已存在並繼續的消息。 – ceejayoz 2011-05-10 20:41:49

+1

@ceejayoz我會傾向於事先想到。我不喜歡向最終用戶顯示原始SQL錯誤消息,即使服務器無法訪問也是如此。 – 2011-05-10 20:49:19

+0

您不必顯示原始錯誤消息。使用'mysql_errno()'來找出錯誤是什麼,然後處理它。 – ceejayoz 2011-05-10 21:01:06

0

你應該看嘗試/不會死()或退出

+1

唉,破舊的mysql擴展不會拋出異常,所以沒有什麼可以嘗試/捕獲。如果使用PDO,這是正確的。 – Charles 2011-05-10 20:42:12

+0

@charles:使用包裝器層使其拋出異常或使用errorexception的另一個原因。所以有辦法讓它工作... – ircmaxell 2011-05-10 23:46:06

2
$result = mysql_query($sql) or print("error with responses"); 

回聲不能在邏輯比較中使用,如你想要做什麼。您應該使用print來代替,這不會導致PHP錯誤。

1

您不必使用die作爲第二個函數調用,它幾乎在每個mysql_query教程中都用作約定。

我們正在做的是評估一個布爾表達式。 $result = $a OR $b。如果$a的值爲真,那麼我們從不執行$b,因爲我們不需要。我們滿足邏輯OR,運營商的一方是真實的,這是我們所需要的。

die()函數立即用消息退出腳本。您可以用自己的功能替換它,以打印出錯誤信息,並在不退出的情況下繼續執行腳本,例如:

function my_error_function($status) { 
    echo "ERROR: $status"; 
} 

$result = mysql_query($sql) or my_error_function("Uhoh. There was a problem executing $sql.");