php PDO prepare() 非对象错误

标签 php mysql pdo

我不断收到“ fatal error :在第 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);
    }
}

} ?>

最佳答案

这看起来是一个范围问题。您应该在构造函数中将 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);

关于php PDO prepare() 非对象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13004384/

相关文章:

php - 一次设置每个 $row 的样式?

php - 如何使表格将相同的列打印到一行中?

php - 设置 LAMP 服务器,phpmyadmin 出现问题“无法加载或保存配置”

php - 此集合实例上不存在 Laravel 属性

PHP OOP CURL 代理错误

mysql - 如何打开并使用转储中生成的非常大的 .SQL 文件?

mysql - 具有外部约束的子表可以是临时表吗?

javascript - 如何使用php中的explode函数拆分数据库中的值

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - SQL COUNT 表的一列