在其他类中使用MySQLi

时间:2014-07-28 08:01:00

标签: php mysqli

我希望有人可以帮我解决我的小问题,但我无法理解。我想要实现的是每次调用时都有一个连接到数据库的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";
        }
    }
}
?>

现在,当我包含此文件并设置如此连接时:

$whatever = new database();

我希望能够在其他类中使用某些函数执行某些数据库操作,如下所示:

require_once("whatever.class.php");

$test = new myclass();

$update = $test->updataDatabase();

在我的&#34; whatever.class.php&#34;文件我有以下功能:

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()

基本上我的问题是,我希望能够使用&#34; $ this-&gt; mysqli&#34;在另一个类中,无需在该类中再次设置数据库连接。我只想包含database.class.php文件,然后连接plus才能使用$ this-&gt; 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;
}

我也试过扩展&#34; myclass&#34;从数据库,没有运气,我尝试使用&#34; :: parent&#34;,也没有任何运气。非常感谢任何帮助,因为我几天来一直在努力解决这个问题。

1 个答案:

答案 0 :(得分:1)

我认为你至少有3种方法可以做到这一点...... (也许还有更多方法)

databasde.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.";
        }
    }
}