2012-04-06 38 views
0

我讀大學時我記得有一個PHP代碼來處理這樣的錯誤..非重複的錯誤,在PHP處理

$rs = $mymodel->find("usr=:usr",array("usr"=>"mahan")) on error echo $mymodel->geterror(); 

,但我知道上面的代碼是錯誤的...

這是一個錯誤處理代碼我不記得了..

也許你會認爲這樣的事情

/**First code suggestion**/ 
    if(!mymodel->find("usr=:usr",array("usr"=>"mahan"))){ 
     $rs = mymodel->find("usr=:usr",array(":usr"=>"mahan")); 
    } 

或類似這樣的

/**Second code suggestion**/ 
    try{ 
     $rs = mymodel->find("usr=:usr",array("usr"=>"mahan")); 
    } 
    catch(Exception $e){ 
     dump($e); 
    } 

我的問題是我不想重複相同的操作只是爲了測試它,如果它會錯誤(第一個代碼建議所示)。

而第二個代碼建議不起作用。

我在非常重要的問題上顯示的錯誤處理是錯誤的,但我認爲它會解決我的問題(我只是不記得正確的)...如果不告訴我你的建議。

我使用Yii框架

回答

2

不明白的地方你上路塊,因爲你仍然可以分配給一個變量:

if (! $rs = $mymodel->find("usr=:usr",array("usr"=>"mahan"))) 
{ 
    # failed. 
} 

所以沒有必要執行同樣的功能再次。

+0

我可以做這樣的事嗎? (O.o)好吧,我會試一試..謝謝你 – 2012-04-06 09:52:42

+0

是的,你可以做到這一點。這在[*表達式*頁面](http://www.php.net/manual/en/language.expressions.php)手冊中有解釋。 – hakre 2012-04-06 09:54:35

+0

哈哈哈耶!我現在可以看到我的錯誤謝謝你^^ – 2012-04-06 09:56:47

1

您可能正在考慮臭名昭着的mysql_query($query) or die(mysql_error());構造。 PHP從來沒有「錯誤的doSomething」結構。這就是說,上述結構仍可使用:

<?php 

function foo() { 
    return false; 
} 

function error($string) { 
    echo $string; 
} 

$rs = foo() or error('Alas'); 

如果foo()回報false,這將意味着error('Alas');被調用。如果foo()返回可評估爲true的任何內容(例如true,int> 1,非空字符串,資源或結果集),則不會調用error('Alas')

就個人而言,雖然,我喜歡下面的結構更好:

<?php 

function foo() { 
    return false; 
} 

function error($string) { 
    echo $string; 
} 

$rs = foo(); 

if($rs === false) { 
    error('Alas'); 
} 

如果用戶無法找到,我不認爲這是一個「特殊」情況,只是用戶不找到。例外情況非常有用,但我傾向於在無法進一步處理請求的情況下使用它們來冒險。

+0

感謝你讓我記住這件事^^反正它怎麼會臭名昭着?反正不介意我感謝^^ – 2012-04-06 09:57:28

+1

@Mahan因爲或死(mysql_error())總是向用戶顯示錯誤。這不是很有禮貌,也不安全;)這就是爲什麼它有這麼糟糕的聲譽。 – 2012-04-06 10:04:21