2013-02-11 127 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