Php 在其他类中使用MySQLi

Php 在其他类中使用MySQLi,php,mysqli,Php,Mysqli,我希望有人能帮我解决我的小问题,但我无法解决。我想要实现的是在每次调用数据库时都有一个连接到该数据库的database.php文件。然后我想能够抓取结果,在其他文件中插入结果等,但不必单独连接到这些文件中的数据库行 我现在拥有的是我的数据库连接类: <?php $db_host = 'localhost'; $db_user = 'dbusername'; $db_pass = 'dbpassword'; $db_name = 'dbname';

我希望有人能帮我解决我的小问题,但我无法解决。我想要实现的是在每次调用数据库时都有一个连接到该数据库的database.php文件。然后我想能够抓取结果,在其他文件中插入结果等,但不必单独连接到这些文件中的数据库行

我现在拥有的是我的数据库连接类:

<?php

$db_host    = 'localhost';
$db_user    = 'dbusername';        
$db_pass    = 'dbpassword';
$db_name    = 'dbname';

class database {

    public $mysqli;

    public function connect($db_host, $db_user, $db_pass, $db_name)
    {
        $this->mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);

        if ($this->mysqli->connect_errno)
        {
            return "An error occured while connecting to the database";
        }
    }
}
?>
我希望能够使用其他类中的一些函数执行一些数据库操作,例如:

require_once("whatever.class.php");

$test = new myclass();

$update = $test->updataDatabase();
在我的“whatever.class.php”文件中,我有以下函数:

public function grabResult($table, $where, $field)
{
    $result = 'SELECT * FROM '.$table.' WHERE '.$where.' = '.$field;
    $query = $this->mysqli->query($result);
无论我尝试什么,我总是会遇到以下错误:

对第5行/home/etc/public_html/whatever.class.php中的非对象调用成员函数query()

基本上我的问题是,我希望能够在另一个类中使用“$this->mysqli”,而不必在该类中再次设置数据库连接。我只想包含database.class.php文件,然后连接并使用$this->mysqli

我在另一个页面上发现:

$newConnection = new database;
$newConnection->connect($db_host, $db_user, $db_pass, $db_name);
$mysqli = $newConnection->mysqli;
但这并没有奏效。与以下内容相同,但不起作用:

$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);

public function __construct($mysqli)
{
    $this->mysqli = $mysqli;
}

我还尝试过从数据库扩展“myclass”,但没有成功,我尝试使用“::parent”,也没有成功。非常感谢您的帮助,因为我已经为此奋斗了几天。

我想您至少有3种方法可以做到这一点。。。(也许还有更多的方法)

下面的步骤首先需要包括databasede.php(带类) 1:第一个是将dbclass扩展到您的类,如

class myclass extends database {

    public function myclass(){

        parent::__construct();
        //....
    }
}
您的
myclass

2:第二种方法是

require_once(database.php);

class myclass {

    private $db;

    public function myclass(){  /* the constructor */

        $this->db = new database();
    }

    public function grabResult($table, $where, $field)
    {
        $result = "SELECT * FROM {$table} WHERE {$where}={$field}";

        return $db->mysqli->query($result);
    }
}
3:第三种方法是

class myclass{

    private $db;

    public function myclass(){
        $this->db = false;
    }

    public function setupDBHandler($dbHwNd){
        $this->db = $dbHwNd;
    }

    public function grabResult($table, $where, $field)
    {
        if($this->db){
            $result = "SELECT * FROM {$table} WHERE {$where}={$field}";
            return $db->mysqli->query($result);
        }
        else{
            return "Setup DBHandler first.";
        }
    }
}

如果使用第一个,请尝试使用此
parent::\uu construct()在myclass构造函数中,它终于开始工作了。我在database.php中更改了一些内容,在另一个类中,我使用了公共函数_-construct(){parent::_-construct();}并扩展了该类。我不确定我以前做错了什么,但我没法让它发挥作用。。非常感谢你的回复,这对我很有帮助:)我确实做到了:)所以我的问题结束了,因为“这个问题已经有答案了”。这个问题和答案是三年前的。我的问题是6年前的。古怪的
class myclass{

    private $db;

    public function myclass(){
        $this->db = false;
    }

    public function setupDBHandler($dbHwNd){
        $this->db = $dbHwNd;
    }

    public function grabResult($table, $where, $field)
    {
        if($this->db){
            $result = "SELECT * FROM {$table} WHERE {$where}={$field}";
            return $db->mysqli->query($result);
        }
        else{
            return "Setup DBHandler first.";
        }
    }
}