【问题标题】:If X function was not successful do Y如果 X 功能不成功,请执行 Y
【发布时间】:2015-08-13 21:30:46
【问题描述】:

我需要知道我刚刚运行的函数是否不成功。下面是有问题的函数及其执行方式。

我知道如何通过在函数中设置变量并检查它是否存在来做到这一点,但不确定这是最佳做法。

//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 通过电子邮件通知自己,但我应该把我要向用户展示的代码放在这里还是最好写点别的东西来保持它的整洁?

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

【问题讨论】:

  • 这行得通吗?您只是在寻求最佳实践建议? Try-catch 是一个很好的方法,尽管你不需要返回 true,因为你不使用它。如果update() 在各个地方使用,我倾向于将try/catch 放在函数中,如果一切正常则返回true,如果有问题则返回字符串消息。然后您可以通过if ($result !== true) 测试是否发生错误。
  • 请参阅下面关于被建议不要将它放在函数中的信息,但阅读本文将它放回函数中是有意义的。谢谢

标签: php


【解决方案1】:

在 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

【讨论】:

  • 谢谢,我可以把它加回函数中,帮助appricated
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    我认为你可以在函数中使用 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;
        }
    
    }
    

    【讨论】:

    【解决方案4】:
    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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      相关资源
      最近更新 更多