2013-09-25 42 views
0

我試圖用一些還記得我班,現在的問題是,我得到調用一個成員函數準備()一個非對象在PDO

Call to a member function prepare() on a non-object

和我沒有得到任何錯誤的:

的index.php:

try { 
    $connection = new PDO('mysql:host=localhost;dbname=ibids', 'root', ''); 
    } 

catch (PDOException $e) 
    { 
     printf ($e); 
    } 

$storage = new Rememberme_Storage_PDO($connection); 
$rememberMe = new Rememberme($storage); 

我發送連接到這個文件: pdo.php 和使用有此代碼:

class Rememberme_Storage_PDO extends Rememberme_Storage_DB { 

    /** 
    * 
    * @var PDO 
    */ 
    protected $connection; 
    public function getConnection() { 
    return $this->connection; 
    } 

    public function setConnection(PDO $connection) { 

    try { 
    $this->connection = $connection; 
     } 
    catch (PDOException $e) 
     { 
      printf ($e); 
     } 
    } 
} 

而且我在這裏有錯誤此功能:

** Rememberme_Storage_PDO類

public function storeTriplet($credential, $token, $persistentToken, $expire=0) { 
    $sql = "INSERT INTO {$this->tableName}({$this->credentialColumn}, " . 
      "{$this->tokenColumn}, {$this->persistentTokenColumn}, " . 
      "{$this->expiresColumn}) VALUES(?, SHA1(?), SHA1(?), ?)"; 
    $query = $this->connection->prepare($sql); 

    if(!$query->execute(array($credential, $token, $persistentToken, date("Y-m-d H:i:s", $expire)))) 
     { 
     die('excute faild'); 
     } 
    } 

在這個函數說:

Fatal error: Call to a member function prepare() on a non-object in F:\wamp\www\rememberme-master\src\Rememberme\Storage\PDO.php on line 44 

我是ne在PDO的wbie,我做錯了什麼?

+0

當你的var_dump($這個 - >連接),您能得到什麼? –

+0

沒有我保持相同的錯誤,並沒有任何其他錯誤,我tryed死了,var_dump,趕上,一切都顯示相同的錯誤..順便說一句,這種好辦法與getConenction方法連接? –

回答

2

它看起來像沒有構造函數。如果在使用new時傳遞變量,它將傳遞給構造函數而不是setter。因此,使用這種時候:

$storage = new Rememberme_Storage_PDO($connection); 

...你需要在Rememberme_Storage_PDO

public function __construct(\PDO $connection) { 
    $this->setConnection($connection); 
} 
+0

工作完美,謝謝你,因爲你救了我的一天:)。不能打勾已回覆需要等待更多4分鐘,我會再次表示感謝。 –

+0

非常歡迎。 – insertusernamehere

+0

Meh擁有30秒:) –

0

顯然$這個 - >連接不是一個對象..因爲你不使用setConnection公共職能是相當明顯..

我只看到你嘗試將連接對象傳遞給構造函數,但沒有構造函數實際上將它存儲在$this->connection屬性中。

也許

$storage = new Rememberme_Storage_PDO($connection); 

應該是:

$storage = new Rememberme_Storage_PDO(); 
$storage->setConnection($connection); 
相關問題