【问题标题】:Undefined Value when trying to get return value from another class' function尝试从另一个类的函数获取返回值时未定义的值
【发布时间】:2015-04-14 22:57:30
【问题描述】:

当我尝试在另一个类中获取函数的返回值时,我得到未定义的变量。 $dbh 为空

在我的入口点文件中,我实例化了一个 DB_Functions 对象:

require_once ('/DB_Functions.php');
$db = new DB_Functions();

这是在 DB_Function.php 文件中。

   class DB_Functions {
        private $db;
        public $dbh;

        //put your code here
        // constructor
        function __construct() {
            require_once 'DB_Connect.php';
            // connecting to database
            $this->db = new DB_Connect();
            $this->dbh = $this->db->connect();
        }
    }

然后我像这样使用 db 对象:

    if ($db->isUserExisted($username)) {}....

错误在isUserExisted(...) 函数内部。第 89 行是 $statement = $dbh....:

  public function isUserExisted($username) {
        $statement = $dbh->prepare("SELECT username FROM users WHERE username = :username");
        $statement->bindParam(':username', $username);
}

这是在实例化 PDO 对象并返回它的 DB_Connect.php 文件中

public function connect() {
        require_once('config.php');
        $dbh = new PDO('mysql:host=' . hostname . ';dbname=' . db_name, username, password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        echo 'Connected to database';
        return $dbh;
}

错误是:

注意:未定义变量:dbh in D:\xampp\htdocs\pharm_project\DB_Functions.php 第 89 行

第 89 行是:

$statement = $dbh->prepare("SELECT username FROM users WHERE username = :用户名");

【问题讨论】:

  • 我假设第一个文件是 pharm_project\DB_Functions? 89号线在哪里?抱歉所有问题,水晶球坏了。
  • 在第 89 行我尝试使用 PDO 对象
  • 所以 DB_Functions.php:89 是 $dbh = new PDO('mysql:host=' . hostname . ';dbname=' . db_name, username, password);?
  • 这是第 89 行----> $statement = $dbh->prepare("SELECT username FROM users WHERE username = :username");
  • 你为什么不在你的问题中包含那些超级有用的信息?你需要把它,以及它周围的所有代码......

标签: php pdo


【解决方案1】:

你的问题来了

public function isUserExisted($username) {
    $statement = $dbh->prepare("SELECT username FROM users WHERE username = :username");
    $statement->bindParam(':username', $username);
}

$dbh 不在此函数的范围内。您需要将数据库连接作为参数传递(如isUserExisted($dbh, $username))或将其存储在您正在调用该函数的对象中。

例如,在对象__construct() 中,您可能会执行$this->dbh = $dbh 或其他操作。然后你的函数会变成

public function isUserExisted($username) {
    $statement = $this->dbh->prepare("SELECT username FROM users WHERE username = :username");
    $statement->bindParam(':username', $username);
}

More information can be found here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 2017-05-15
    • 2020-06-29
    • 2014-01-07
    • 2018-03-29
    相关资源
    最近更新 更多