2012-09-15 30 views
0

earlier question中,我得到了在odbc_connect調用中使用try-catch語句的建議。那麼說完了,那就是我試圖去做的。在PHP中使用odbc_exec時使用try-catch語句的意外行爲

下面的代碼嘗試使用僞造的登錄信息連接到數據庫,但不會像檢測到的那樣工作。

<?php 
    try 
    { 
    odbc_connect('BogusDatabase','BogusUser','BogusPassword'); 
    } 
    catch (Exception $e) 
    { 
    echo "Something went wrong!"; 
    } 
?> 

我期望的輸出是一個字符串說「出事了!」。相反,我得到這個:

Damn! I don't want this!

我使用Wampserver運行我的PHP代碼。我不知道這是否是問題的一部分。

回答

4

正如@Aurimas說的,你必須使用error_handler來做到這一點。 http://php.net/manual/en/function.set-error-handler.php

該函數將監視腳本中發生的錯誤並調用每次拋出錯誤時提供的函數。

一個簡單的處理程序是

function($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline); 
} 

它的錯誤是在腳本中提出的每一次拋出一個ErrorException。 所以這整個腳本將表現爲你所期望:

set_error_handler(function($errno, $errstr, $errfile, $errline) { 
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline); 
}); 
try 
{ 
    odbc_connect('BogusDatabase','BogusUser','BogusPassword'); 
} 
catch (Exception $e) 
{ 
    echo "Something went wrong!"; 
} 
+0

大(odbc_connect(...)!)!這解決了我的問題。謝謝! – Speldosa

0

在PHP手冊Exeptions

內部PHP函數主要使用錯誤報告,只有現代面向對象的擴展使用異常。但是,可以將錯誤簡單地轉換爲異常,並且ErrorException

查看ErrorException並設置您的自定義錯誤句柄,以捕獲這些錯誤。

+0

你有這方面的一個非希臘(或非怪胎)版本? :)我一直在使用PHP一段時間,但我無法理解這裏所說的一切。 – Speldosa

+0

看看@artragis答案;) –

0

該函數不拋出異常。相反,它會觸發警告。如果您不想顯示警告,則可以使用error_reporting()僅顯示實際錯誤。

+0

嗯,不,我不希望顯示警告。但是,我也想知道連接到數據庫時出現什麼問題,以便我可以嘗試修復它,因此,我想要查看catch塊中的代碼。我在上面查看Aurimas鏈接,但這對我來說就像是希臘語,我並不真正瞭解我應該如何實施它。 – Speldosa

+0

好,odbc_connect返回出錯假的,所以你可以做這樣的事情: 如果 //錯誤,試圖處理它 其他 // OK – Nim