1

PDO クラスについて質問があります。それは機能しておらず、次のエラーが作成されます。このコードを数時間試しましたが、エラーは見つかりませんでした。

前もって感謝します。

<?
// classes.php

class Connection{

    public static $db;

    function __construct() 
    {
        try {
            $this->$db = new PDO('mysql:host=localhost;dbname=vnm', '--', '--', array(PDO::ATTR_PERSISTENT => true));
            $this->$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo 'Connection failed: ' . $e->getMessage();
        }   
    }

    public function GetAccess()
    {
        return $db;
    }

}

class Page
{
    public function show_page($s_p1)
    {
         $db = Connection::GetAccess();
         $id = "1";
         $stmt = $db->prepare('SELECT * FROM users WHERE id = :id');
         $stmt->execute();
         while($row = $stmt->fetch())
         {
             print_r($row);
         }
    }
}?>
4

2 に答える 2

2

静的メンバーには、 を使用してアクセスする必要がありますstatic::。を使用する必要があるときに、コードで直接アクセス$dbし、誤って を使用します。として宣言する必要もあります。$this->dbstatic::$dbGetAccesspublic static function

また、呼び出しConnection::GetAccessは実際にはクラスをインスタンス化しないため、static::$db別の場所でシングルトン インスタンスを作成しない限り、おそらく null になります。

ここでシングルトンの詳細を読むことができます: http://www.talkphp.com/advanced-php-programming/1304-how-use-singleton-design-pattern.html

于 2012-10-24T21:52:45.590 に答える
0

これを試して。すべての静的メソッドを削除しました。

    <?
// classes.php

class Connection{

    public $db;

    function __construct() 
    {
        try {
            $this->$db = new PDO('mysql:host=localhost;dbname=vnm', '--', '--', array(PDO::ATTR_PERSISTENT => true));
            $this->$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo 'Connection failed: ' . $e->getMessage();
        }   
    }

    public function GetAccess()
    {
        return $this->$db;
    }

}

class Page
{
    public function show_page($s_p1)
    {
         $con = new Connection();
         $db = $con->GetAccess();
         $id = "1";
         $stmt = $db->prepare('SELECT * FROM users WHERE id = :id');
         $stmt->execute();
         while($row = $stmt->fetch())
         {
             print_r($row);
         }
    }
}?>
于 2012-10-25T09:49:44.953 に答える