2013-02-11 81 views
1

我需要知道我剛運行的函數是否成功。下面是有問題的功能以及它如何執行。如果X函數沒有成功執行Y

我知道我可以通過在函數內設置一個變量來檢查它是否存在,但不知道這是最佳實踐。

//Update users function 
function update($db, $fn, $ln, $email, $offers, $vlue, $responce) 
{ 
    $stmt = $db->prepare("insert into kkt (fName_765, lName_765, email_765, signup_765, kkt_resp_765, stamp_765) values (:fname, :lname, :email, :signup, NOW())"); 

    $parameters = array(
     ':fname' => $fn, 
     ':lname' => $ln, 
     ':email' => $email, 
     ':signup' => $offers); 

    $stmt->execute($parameters); 
    print $db->lastInsertId(); //show ID 
    return true; 
} 


//Test Attributes 
$fn = 'test'; 
$ln = 'test'; 
$email = '[email protected],com'; 
$offers = '1'; 

try { 
    update($db, $fn, $ln, $email, $offers); 
} 
catch (PDOException $e) { 
    echo "no update there is a slight problem " . $e->getMessage(); 
} 

我會用嘗試捕捉通過電子郵件通知我,如果沒有成功,但我應該把我要告訴用戶在這裏還是最好寫別的東西,以保持它的代碼整潔?

感謝您的意見 - 最終代碼已經結束在CR:https://codereview.stackexchange.com/questions/21481/pdo-connection-prep-and-execute-in-there-own-functions

+1

請問這項工作的執行力,你只是之後的最佳做法建議?嘗試捕捉是一個很好的方法來做到這一點,儘管你不需要返回true,因爲你不使用它。如果在不同的地方使用'update()',我傾向於將try/catch放入函數中,如果一切正常,則返回「true」,如果出現問題則返回字符串消息。然後你可以執行'if($ result!== true)'來測試是否發生錯誤。 – halfer 2013-02-11 10:03:19

+0

請參閱下面關於被建議將這不在函數中的內容,但是閱讀這個函數是有意義的。謝謝 – odd 2013-02-11 10:16:52

回答

3

在PHP中,你可以處理它以三種不同的方式,他們會因爲PHP本身使用所有被認爲是好的他們都(這看起來確實令人困惑)。你可以在錯誤返回false(和處理它的返回結果):

function update($db, $fn, $ln, $email, $offers, $vlue, $responce) { 
    try { 
     ... 
    } catch (PDOException $e) { 
     return false; 
    } 
} 

您可能會引發錯誤(並通過電子郵件通知你自己的錯誤處理程序):

function update($db, $fn, $ln, $email, $offers, $vlue, $responce) { 
    try { 
     ... 
    } catch (PDOException $e) { 
     trigger_error("...", E_USER_WARNING); 
    } 
} 

,或者你可以拋出你自己的例外(並在發現時發送電子郵件):

function update($db, $fn, $ln, $email, $offers, $vlue, $responce) { 
    try { 
     ... 
    } catch (PDOException $e) { 
     throw new Exception("..."); 
    } 
} 

這並不重要。但是,通常建議是:

    你使用異常,當你正在管理以某種方式收回錯誤,或者如果它是錯誤的,不應該停止整個程序
  • 您使用布爾返回值只有當
  • 他們真正需要(爲is_*類型的函數),而不是錯誤
  • 您使用trigger_error當你想停止整個程序
+0

謝謝,我可能只是添加這個回到功能,幫助appricated – odd 2013-02-11 10:18:35

+0

這幫了我很多謝謝你,更新了CR – odd 2013-02-11 11:58:09

1

您可以使用if(function())檢查功能已成功,或不執行。它返回布爾標誌truefalse

if(update("test","test","[email protected],com",1)) 
{ 
    //successful 
} 
else 
{ 
    //callfunction2() 
} 
1

我認爲你可以在函數中使用的try-catch:

function update($db, $fn, $ln, $email, $offers, $vlue, $responce) 
{ 
    $stmt = $db->prepare("insert into kkt (fName_765, lName_765, email_765, signup_765, kkt_resp_765, stamp_765) values (:fname, :lname, :email, :signup, NOW())"); 

    $parameters = array(
     ':fname' => $fn, 
     ':lname' => $ln, 
     ':email' => $email, 
     ':signup' => $offers); 

    try { 
     $stmt->execute($parameters); 
     print $db->lastInsertId(); //show ID 
     return true; 
    } catch(Exception $ex) { 
     //log, or pirint error message 
     //or return 0 
     return false; 
    } 

} 
+0

我確實已經嘗試並捕獲函數,並被告知最好將函數從此函數中移出。 http://codereview.stackexchange.com/questions/21481/pdo-connection-prep-and-execute-in-there-own-functions – odd 2013-02-11 10:14:54

1
try { 
    $result=update($db, $fn, $ln, $email, $offers); 
    if(!$result) 
     throw new Exception("Query not succesful!"); 
} 
catch (PDOException $e) { 
    mail("what","ever","you","want"); 
    echo "no update there is a slight problem " . $e->getMessage(); 
} 
+0

將它添加到一個變量似乎對我很好。謝謝 – odd 2013-02-11 10:19:16