2011-01-27 5 views
0

データベースを照会して生成する他のオブジェクトの配列を含むクラスを作成しています。このクラスの各インスタンスはほぼ同じクエリを実行するので、私の考えは共有プリペアドステートメントハンドラをセットアップすることであり、各クラスは単に異なる変数をバインドします。 『;』「(」、または「」期待構文エラー、予期しない:PHPで共有プリペアドSQLステートメントを実装する

解析エラー:私は、私は次のエラーを取得するので、これは動作しません知っている

class CQuestion 
{ 
    // this is line 16 
    static private $sthAns = SPDO::prepare(
     'SELECT * FROM answers WHERE answers.q_id = :qid' 
    ); 

    // constructor, other functions, etc. 

    private function GetAnswers() 
    { 
     self::$sthAns->bindParam(':qid', $this->m_iQID, PDO::PARAM_INT); 
     self::$sthAns->execute(); 
    } 

} 

:ここにコードスニペットですCに:\ XAMPP \ htdocsに\ mbtest \ CQuestion.phpライン16に

誰もがクラスのインスタンスごとにプリペアドステートメントをリセットせずにこれを実装する方法を知ってい

包みなさい任意のはありますか?混乱私は自分のシングルトン(SPDO)にPDOをラップしているiniファイルがあります。それで私がアクセスしている理由は、静的参照を介して準備しています。

+0

16行とは何ですか?通常の構文エラーのように見えます。文に静的にアクセスできるかどうかは分かりませんが、別の問題になる可能性があります。 – Cfreak

+0

ごめんなさい、それを忘れてしまいました。私は16行目に関する注釈を追加しました。私はかなり16行目が構文エラーであると確信していますので、私の質問はどうしたらいいですか? – Krustal

答えて

2

オブジェクト/クラスプロパティをインスタンス化するときにメソッドを呼び出すことはできません。そのためにコンストラクタ/イニシャライザを使用する必要があります。

class CQuestion 
{ 
    private static $sthAns; 

    private static function getSthAns() 
    { 
     if (!isset(self::$sthAns)) self::$sthAns = SPDO::prepare(
      'SELECT * FROM answers WHERE answers.q_id = :qid' 
     ); 
     return self::$sthAns; 
    } 

    private function GetAnswers() 
    { 
     self::getSthAns()->bindParam(':qid', $this->m_iQID, PDO::PARAM_INT); 
     self::getSthAns()->execute(); 
    } 
} 
+0

SPDOクラスがどのように実装されているのかという点で、ちょっと愚かな気持ちになりました。 – Krustal

関連する問題