【问题标题】:Unable to pass variable from function to class无法将变量从函数传递到类
【发布时间】:2014-03-28 14:02:17
【问题描述】:

我有一个 db 连接函数和一个抽象数据库类,基于我的结构方式。我必须继续将我的 PDO 连接代码添加到构造函数中。

我的 config.php 我有

function dbconnect() 
{
            $dbh; // database handler
             $host = 'localhost';
             $user =  'root';
             $pass =  '';
             $dbname = 'test101';
             $error;
                // Set DSN
                $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;
                // Set options
                $options = array(
                    PDO::ATTR_PERSISTENT    => true,
                    PDO::ATTR_ERRMODE       => PDO::ERRMODE_EXCEPTION,
                    PDO::ATTR_EMULATE_PREPARES => false

                );
                // Create a new PDO instanace
                try{
                    $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
                }
                // Catch any errors
                catch(PDOException $e){
                    $this->error = $e->getMessage();
                }

           }

在我的 abstract.class.php 中

 include_once('config/config.php');

class Database {


           public function __construct() {
               dbconnect(); //connect to database

           }

           public function query($query) {
               $this->stmt = $this->dbh->prepare($query);
           }

}
$database = New Database();

不在 config.php 我有一个数据库处理程序$dbh,在 abstract.class.php 我在查询函数中调用它。

我的问题

我收到一个错误Undefined property: Database::$dbh。如何将它从我的 config.php 传递给 abstract.class.php?我认为当您使用 PHP 包含时,这与将该文件中的任何内容复制并粘贴到您想要使用它的文件中是一样的。我如何将$dbh 从 config.php 传递到 abstract.class.php 请随时就可能发生的任何问题或任何与我的 PDO 连接有关的安全问题提出建议。

如果我在构造函数中复制并传递我的函数并将数据库连接变量设置为构造函数之外的private $dbh;,则此方法有效,但问题是当我不需要时总是必须包含该类。有时我可能只需要连接到数据库,我还想将define salt 添加到 config.php

【问题讨论】:

  • 你认为在dbconnect函数中定义的__construct函数会做什么?
  • @zerkms 抱歉,当我复制代码时忘记编辑该部分
  • 问题仍未解决。它们只是 2 个嵌套函数。
  • @user3057514:它指向当前对象
  • @user3057514 在您的数据库类中您正在调用 $this->dbh,但是该类中不存在 dbh,因此在您的 dbconnect 函数中,返回 $dbh,然后分配 $this-> dbh = dbconnect();

标签: php database oop pdo


【解决方案1】:

在您的数据库类中,您正在调用 $this->dbh,因此在您的 dbconnect 函数中, return $dbh,则在数据库类构造函数中:$this->dbh = dbconnect();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2016-10-10
    • 2023-03-17
    相关资源
    最近更新 更多