如何在其他类中使用数据库连接

时间:2017-04-24 18:30:49

标签: php class oop methods database-connection

PHP编程对我来说很新鲜 - 所以我希望我不要问一些愚蠢的事情。但是,我找不到任何问题的答案:-(

我已将数据库连接保存在单独的.php文件中。让我们说" connection.inc.php"

connection.inc.php如下所示:

$host   = "name.server.com";
$dbname = "foo";
$user   = "bar";
$pass   = "PaSW0rd";

try
{
    $DBH = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass,
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

}
catch(PDOException $e)
{
   ...
}

在我的index.php中,我会将connection.inc.php包含在' include_once" connection.inc.php"

另外,我有一个名为house.class.php的类,其中我有一个带有SQL查询的方法到我的数据库。我通过' getColor($ id,$ DBH)'来调用该方法。来自我的index.php

有没有办法在不将$ DBH放入调用的情况下使用该方法?

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您应该从类本身而不是索引文件中获取$DBH。然后你可以让数据库连接的那个实例可以在类中使用其他方法,而不必为每个函数重新连接或者必须为连接提供连接作为参数。

这样的一个例子看起来像这样:

house.class.php

<?php
  class House{

      private $DBH;

      function __construct(){
        include_once "connection.inc.php";
        $this->DBH = $DBH;
      }

      function getColor($id){
        $this->DBH // <---- use it like this instead of your $DBH old variable.
      }
  }
?>

答案 1 :(得分:0)

我们假设您有一个名为House且使用getColor()方法的班级,并且在您的index.php中。您可以在函数/方法中使用关键字global,但我强烈反对这一点。例如:

public function getColor(int $id)
{
    global $dbh;
    //and use it as $dbh
    $dbh->prepare(....
 }

或者你可以在构造函数中注入它。您的课程如何显示的示例

class House
{

    private $dbh;
    function __construct($dbh)
    {
         $this->dbh = $dbh;
    }

    public function getColor($id)
    {
       //$this refers to current object context
        $this->dbh->prepare.....
    }
}

当您实例化House对象时,您将$DBH传递给构造函数。您index.php的示例:

include_once "connection.inc.php";
$house = new House($DBH);
$house->getColor($id);

虽然,我建议您检查域驱动设计,工厂和存储库模式,以及Doctrine或Eloquent之类的ORM,以便更好地理解如何将应用程序/域逻辑与数据库分离。

答案 2 :(得分:0)

class Database
{
    private $host = "localhost";
    private $dbname = "codeignitor";
    private $username = "root";
    private $password = "";
    public $conn;

    public function getConnection()
    {
        $this->conn = null;
        try {
            $this->conn = new PDO ("mysql:host=" . $this->host . ";dbname=" . $this->dbname, $this->username, $this->password);
            $this->conn->exec("set names utf8"); 
            // echo "MySqlConnected";
        } catch(PDOException $exception){ 
            echo "Connection error: " . $exception->getMessage(); 
        } 
            return $this->conn; 
    } 
}