2012-10-22 47 views
1

我一直收到「致命錯誤:調用第30行/var/www/html/portal_core/build_portal.php中的非對象的成員函數prepare() 」。 我是新來的PDO,我真的使用這個作爲測試,讓我的頭。你們能幫我理解我做錯了什麼嗎?php PDO在非對象錯誤上準備()

<?php 

class build_portal 
{ 
protected $dbh; 

function __construct($dbname,$theme) 
{ 
    try 
    { 
    $dbh = new PDO('mysql:dbname='.$dbname.';host=localhost',"username","password"); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $this->log_error("Construct 1st Try statement 3rd Line"); 
    } 
    catch (PDOException $e) 
    { 
     echo "Page Could Not Be Loaded"; 
     return -1; 
    } 



} 

function log_error($cause) 
{ 
    try 
    { 
    $sth = $this->dbh->prepare("SELECT * from portal_errors"); 
    $sth->setFetchMode(PDO::FETCH_ASSOC); 
    $sth->execute(); 
    } 
    catch (PDOException $e) 
    { 
     print_r($e->errorInfo); 
    } 
} 

} ?>

回答

2

它看起來是範圍問題。你應該在構造函數中分配dbh$this->dbh。當您稍後在log_error()中訪問它時,您期望它是一個類屬性,但它最初在構造函數中定義爲局部變量。

$this->dbh = new PDO('mysql:dbname='.$dbname.';host=localhost',"username","password"); 
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
+0

哦,上帝該死的,一開始我就讀完了,我知道我做了感謝的朋友。它總是那些小東西,抓住你! –