1

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

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

//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

4 回答 4

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当你想停止整个程序的执行时使用
于 2013-02-11T10:10:15.220 回答
2

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

if(update("test","test","test@test,com",1))
{ 
   //successful 
}
else
{ 
   //callfunction2() 
}
于 2013-02-11T10:05:59.377 回答
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;
    }

}
于 2013-02-11T10:08:46.600 回答
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();
}
于 2013-02-11T10:09:13.590 回答