2012-03-16 48 views
0

私のデータベースのPDOクラスに基づいた単純なクラスを作成しようとしています。このIDを取得して情報を出力します。私は "qu"でこれをやろうとしていますが、次のエラーが表示されます: "未定義メソッドqu :: get()"を呼び出します。定義されていないメソッドへのPDOクラスのスコープの呼び出し

多分問題が混在しているので、ここの助けがあれば助かります。どうもありがとう!!

class db { 

    protected static $conn; 
    private function __construct(){} 

    public static function connect() { 

     if (!isset(self::$conn)) { 
      self::$conn = new PDO('mysql:host=localhost;dbname=database', DB_USER, DB_PASSWORD); 
     } 

     return self::$conn; 
    } 

} 

    class qu { 

    private $db; 
    function quconn (&$db){ 
     $this->db = &$db; 
    } 

    private static function getq($id){ 

     $sql="SELECT * FROM table WHERE id=:id"; 
     $stmt = self::quconn()->prepare($sql); 
     $stmt->execute(array(':id'=> $id)); 
     $result = $stmt->fetchAll(PDO::FETCH_ASSOC); 
     return $result; 

    } 

} 

//$data = db::connect()->query("SELECT * FROM table")->fetchAll(); // this works 

$data = qu::getq("22"); //can i use something like this? this causes the error 
print_r($data); 

答えて

1

関数のgetqにpublicアクセス修飾子を付けてください。 そうでない場合は、次の行がgetqとして失敗しますが、プライベート関数である

$data = qu::getq("22"); 

第二にこのコードでは問題

function quconn (&$db){ 
    $this->db = &$db; 
} 

あなたは、静的なコンテンツ$から関数quconnを入力するように、これは使用できません。

代わりにself :: $ dbを使用してください。

クラスquの場合、シングルトンmnagamentクラスであるクラスdbと同じ構造に従います。

私も

PHPのoffiacialドキュメントを約

も、私はあなたが合格バイ参照必要はないと思うアルロットを提供しています。..自分で$これと自己、静的コンテストなどの違いを明確にすることをお勧め方法: 次のようにquconn機能を書き換えしよう:

function quconn ($db){ 
    self::$db = $db; 

}

私はドンちなみにクラスQUが十分である」トンの事は、あなたがこの命令は動作しませんパッシング・バイ・リファレンス・問題を修正した場合でも を 『操作』:

$stmt = self::quconn()->prepare($sql); 

あなたは呼び出しの結果に準備機能を呼び出しています...何も返さない、

をquconnするために、私はお勧め:

$stmt = db::connect()->prepare($sql); 

これはPDPのインスタンスを取得し、prapareメソッドを呼び出します....あなたの担当者のための

+0

感謝ly、 "self :: $ db = &$db;"私に "構文エラー、予期しないT_OBJECT_OPERATOR"が返される – Tim

+0

私はエラーを修正する方法を提案する私の答えを編集しました –

関連する問題