PHP在类中调用数据库类

时间:2014-07-31 16:43:53

标签: php mysql class pdo

我很熟悉课程和PDO。 我在谷歌搜索了几个小时和几个小时,找到一个可能是一个简单问题的解决方案。

事情是这样的。我已经创建了一个连接到我的数据库的类。 然后,我创建了一个类,使用查询从数据库加载信息。 然后,我使用脚本来组合这两个类。 虽然,即使我连接到数据库,它仍然无法在我的其他课程中理解它。 我一直在收到错误:

未定义的变量:db

尝试在

中获取非对象的属性

中的非对象上调用成员函数prepare()

所有关于我的 $ query = $ db-> conn->准备语句的发票类。

我该如何解决这个问题?

我有以下数据库类:

class database
{
    private $host;
    private $dbname;
    private $username;
    private $password;
    public $conn;

    public function __construct($host,$db,$name,$pass)
    {
        $this->host=$host;
        $this->dbname=$db;
        $this->username=$name;
        $this->password=$pass;
        $dsn = 'mysql:'.$this->dbname.';'.$this->host;
        try {
            $this->conn = new PDO($dsn, $this->username, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo"connection made";
        } catch (PDOException $e) {
            echo"Could not connect to the database";
            die;
        }       
    }   
}   

?>

然后,有一个类从数据库(发票类)

构建信息
class Invoice{
    var $customerID;
    var $customerSalutation;
    var $customerFirstName;
    var $customerMiddleName;
    var $customerLastName;
    var $customerCompanyName;
    var $customerStreetName;
    var $customerHouseNumber;
    var $customerHouseNumberSuffix;
    var $customerPostalCode;
    var $customerCountry;


    function set_customer($id){
        if ((!isset($id)) or ($id=="")){
            echo "No customerID specified";
            die;
        } else {
            if (ctype_digit($id)){
                $query = $db->conn->prepare('
                SELECT CustomerID, CustomerSalutation, CustomerFirstName, CustomerMiddleName, CustomerLastName, CustomerCompanyName, CustomerStreetName,
                CustomerHouseNumber, CustomerHouseNumberSuffix, CustomerPostalCode, CustomerCountry WHERE CustomerID = :customerID');

                $array = array (
                    'customerid' => $this->customerID
                );

                $query->execute($array);                

            } else {
                echo "Invalid customer ID";             
                die;
            }
        }
    }
}
?>

我在以下基本脚本中打开它:

<?php
include('database.php'); //open database class
$host="localhost";
$db="dbname";
$name="root";
$pass="";

$db = new database($host,$db,$name,$pass);

include('InvoiceBuilderClass.php'); //include invoice class

$invoice = new Invoice();

$cusID="1";
$invoice->set_customer($cusID);
?>

2 个答案:

答案 0 :(得分:1)

$db在您班级的正文中不可见。您应该将其作为参数传递(即到Invoice构造函数,或使用global

熟悉PHP中的变量范围(docs)。

答案 1 :(得分:0)

在您的班级&#39;发票&#39;将$db添加到您的会员代码列表中:

// (...)
var $customerPostalCode;
var $customerCountry;
var $db;

然后你需要在你的课程中添加一个构造函数&#39; Invoice&#39;您将数据库实例传递给:

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

在其他&#34;方法&#34;你的类的(函数)需要像这样访问这个成员变量

$this->db->conn->prepare('...');

在你的&#34;基本脚本&#34;你只需要传递你的类的实例&#34;数据库&#34;到你的班级&#34;发票&#34;:

$invoice = new Invoice($db);