2

我正在尝试将常用方法(opendb)放在与我的连接配置文件(connect.php)相同的类和文件中,见图 A

class qcon{

public static $conn;

    function dbcon()
    {


         if (empty($conn)) 
         {
             $host = 'x';
             $username = 'x';
             $password = 'x';
             $dbname = 'x';
             $conn = mysqli_connect($host , $username  , $password ,$dbname) or die("Oops! Please check SQL connection settings");
         }

         return $conn;
    }


        function openDB($conn) 
    {

    if (!$conn)
    {
        $this->error_msg = "connection error could not connect to the database:! ";  
        return false;
    }
    $this->conn = $conn;
    return true;
    }

现在我希望能够传递 fig A 的连接输出,这样我就可以正确使用另一个类文件中的方法。称之为class.php。这是 class.php 上用于查看记录的一个示例函数。见图。乙

    require_once("assets/configs/connect.php"); 

    class dbcats {

var $conn;

      function getResult(){

                $result = mysqli_query($this->conn , "SELECT * from felines" );
                if ($result) {
                    return $result;
                } 
                else {
                    die("SQL Retrieve Error: " . mysqli_error($this->conn));
                }
            }

             function closeDB() {
                                            mysqli_close($this->conn);
                                    }

现在,为了让电话开始工作,下面的图 C 就是我所在的位置。我有点卡住了。

$db1 = new qcon();
$helper = new dbcats();
$db1->openDB();
$helper = $db1;
$result = $helper->getResult();

所以我们在这里。逻辑很简单(如果我不太清楚,我会更新问题)那么有人会建议我需要哪些修改才能使电话正常运行吗?

4

3 回答 3

2

Orangepill 的解决方案很好,很可能会让您快速上手。然而,我建议对你的类做一些小的改动,让你更容易地在你的程序中重用它们的功能。

在这里,qcon保存您的数据库连接信息和功能。它有一个 getter 方法,getConn()允许您根据需要获取和传递该连接。

class qcon
{
    protected $conn;

    public function __construct() { ... }
    public function dbcon()       { ... }
    public function openDB()      { ... }
    public function closeDB()     { ... }

    public function getConn() { return $this->conn; }
}

dbcats这是替代类的示例。它在qcon其构造的一部分中接收您的类,并将其作为受保护的成员变量保存,它可以在需要时使用它。它还具有 getter 和 setter,因此您可以随时通过getQConn()和更改或检索此类的数据库连接setQConn()

class dbcats
{
    protected $qcon;

    public function __construct(qcon $q) { $this->qcon = $q; }
    public function getResult()          { ... }
    public function getQConn()           { return $this->qcon; }
    public function setQCon(qcon $q)     { $this->qcon = $q; }
}

这可能不是最快的解决方法,但我相信从长远来看,这样的做法会更好地为您服务。

于 2013-08-22T21:41:48.827 回答
0

从我所看到的情况来看,您的两个班级都缺少最后的大括号 }。如果您正确地进行缩进,一切都会更容易看到。也就是说,每次您有一个左大括号 { 时,以下行将缩进一个制表符。像这样:

class qcon {

    public static $conn;

    function dbcon()
    {
         if (empty($conn)) 
         {
             $host = 'x';
             $username = 'x';
             $password = 'x';
             $dbname = 'x';
             $conn = mysqli_connect($host , $username  , $password ,$dbname) or die("Oops! Please check SQL connection settings");
         }

         return $conn;
    }


    function openDB($conn) 
    {
        if (!$conn)
        {
            $this->error_msg = "connection error could not connect to the database:! ";  
            return false;
        }
        $this->conn = $conn;
        return true;
    }
} <<< Missing this one



class dbcats {

    var $conn;

    function getResult(){
        $result = mysqli_query($this->conn , "SELECT * from felines" );
        if ($result) {
            return $result;
        } 
        else {
            die("SQL Retrieve Error: " . mysqli_error($this->conn));
        }
    }

    function closeDB() {
        mysqli_close($this->conn);
    }
} <<< Missing this one
于 2013-08-22T21:14:19.200 回答
0

您需要将 qcon 类的实例注入 dbcats 类。

require_once("assets/configs/connect.php"); 

class dbcats {
  var $conn;
  public function __construct(qcon $dbconn){
      $this->conn = $dbconn;
  }
  function getResult(){
            $result = mysqli_query($this->conn , "SELECT * from felines" );
            if ($result) {
                return $result;
            } 
            else {
                die("SQL Retrieve Error: " . mysqli_error($this->conn));
            }
         }

         function closeDB() {
                                        mysqli_close($this->conn);
         }
  }

然后,当您创建一个 dbcats 实例时,传入一个 conn 实例,例如...

$db1 = new qcon();
$db1->openDB();
$helper = new dbcats($db1);
$result = $helper->getResult();
于 2013-08-22T21:33:32.157 回答