如果X功能不成功,请执行Y.

时间:2013-02-11 10:01:12

标签: php

我需要知道我刚刚运行的功能是否成功。以下是有问题的功能及其执行方式。

我知道如何通过在函数中设置变量并检查它是否存在来实现此目的,但不确定这是最佳实践。

//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 = 'tesst@test,com';
$offers = '1';

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

如果不成功,我会使用try catch通过电子邮件通知自己,但是我应该把代码放在这里给用户显示,还是最好写一些其他内容以保持整洁?

感谢您的所有评论 - 最终的代码现在已经过CR:https://codereview.stackexchange.com/questions/21481/pdo-connection-prep-and-execute-in-there-own-functions

4 个答案:

答案 0 :(得分: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_*类型的函数)而不是错误时才使用bool返回值
  • 当您想要停止执行整个程序时使用trigger_error

答案 1 :(得分:1)

您可以使用if(function())检查功能是否成功执行。它返回truefalse中的布尔标志。

if(update("test","test","test@test,com",1))
{ 
   //successful 
}
else
{ 
   //callfunction2() 
}

答案 2 :(得分: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;
    }

}

答案 3 :(得分: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();
}