3

簡単な質問がありますが、迅速で明確な回答が得られることを願っています。

php.comのマニュアルには、準備されたクエリに値をバインドした後のexecute()は、成功した場合はtrueを返し、失敗した場合はfalseを返すと記載されています。十分に単純です。

私はこれを明確にしたかっただけです。execute()で返される値は、直接エラーに対応します。たとえば、接続が成功した後にデータベースが何らかの理由でダウンし、クエリを実行できなかった場合、またはその他の特別な問題が発生した場合です。

いくつかのコードを考えてみましょう:

    protected function territoryCheck($numberOut)
    {
        $this->numberOut = $numberOut;

        //Execute test
        $this->checkConnect();
        $stmt = $this->dbh->prepare("SELECT t_id FROM Territory WHERE t_id = :param1")
        $stmt->bindParam(':param1', $this->numberOut);
        $stmt->execute();

        //Determine value of test
        if($stmt == FALSE)
        {
            return FALSE;
        }   
    }

私はこれが私が望むように動作しないとかなり確信しています。重要なのは、パラメータに対応する値があるかどうかに基づいて、t_idがデータベースに存在するかどうかを確認することです。その場合、$ stmt-> fetch()を使用する必要があります。私はそれを言うのは正しいですか?

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

編集:同じ方針に沿って、置くのは賢明でしょうか-またはベストプラクティスと言うべきです-

//Execute test
        $this->checkConnect();
        $stmt = $this->dbh->prepare("SELECT t_id FROM Territory WHERE t_id = :param1")
        $stmt->bindParam(':param1', $this->numberOut);
        $stmt->execute();

PDOは例外を返すので、try-catch内ですか?

4

1 に答える 1

2

はい、その通りです。クエリの実行に失敗した場合にのみ$stmt->execute()返されます。空の結果セットでfalseは返されません。falseしたがって、を使用fetch()して結果を確認し、空の結果セットをfetch()返す必要があります。false

execute()また、例外については、メソッドなどに例外モードを設定した場合にのみPDOが例外をスローしますnew PDO(...)が、例外モードが設定されているかどうかに関係なく例外をスローします。

于 2012-09-19T03:29:03.760 に答える