1

「致命的なエラー:30行目の/var/www/html/portal_core/build_portal.phpの非オブジェクトでメンバー関数prepare()を呼び出す」が発生し続けます。私は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);
    }
}

}?>

4

1 に答える 1

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);
于 2012-10-22T02:45:33.127 に答える