10

だから私は PDO の学習に取り組んでおり、標準の PHP MySQL 関数からの移行を行っています。しかし、質問があります。ブロックに関しては、try {}具体的には何を入れて何を外に出す必要があるのでしょうか?

使用するものはすべて$sth-> ...内部にある必要がありtry {}ますか? ステートメントが最初に準備されてから実行されるまでの間だけでよいのでしょうか。それ以下でも?

どんな助けでも大歓迎です。:)

クラスにあるメソッドの例を次に示します。きちんと整理されていますか?すべてを の中に入れる方法に注目してくださいtry {}。それは間違っていますか?私には間違っているように感じますが、どのように変更すればよいかわかりません。

protected function authorized()
{
    try
    {
        // Attempt to grab the user from the database.
        $sth = $dbh->prepare("
            SELECT COUNT(*) AS num_rows
            FROM users
            WHERE user_id = :user_id
            ");

        $sth->bindParam(':user_id', $this->user_id);
        $sth->execute();

        // Check if user exists in database.
        if ($sth->fetch()->num_rows > 0)
        {
            // User exists in database, and is therefore valid.
            return TRUE;
        }
        else
        {
            // User does not exist in database, and is therefore invalid.
            return FALSE;
        }
    }
    catch (PDOException $e)
    {
        pdo_error($e);
    }
}
4

1 に答える 1

8

try キャッチは関数の外にある必要があります。

<?php

protected function authorized() {
    // Attempt to grab the user from the database.
    $sth = $dbh->prepare("
            SELECT COUNT(*) AS num_rows
            FROM users
            WHERE user_id = :user_id
            ");

    $sth->bindParam(':user_id', $this->user_id);
    $sth->execute();

    // Check if user exists in database.
    if ($sth->fetch()->num_rows > 0) {
        // User exists in database, and is therefore valid.
        return TRUE;
    }
    else {
        // User does not exist in database, and is therefore invalid.
        return FALSE;
    }
}

...

try {
    authorized()
}
catch (PDOException $e) {
    pdo_error($e);
}

メソッド内で例外を処理しないでください。メソッド試して、結果の例外が発生した場合はそれをキャッチします。

于 2012-06-14T19:19:34.297 に答える