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 では、これを 3 つの異なる方法で処理できます。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 に答える
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 に答える