Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在类中调用databaseclass_Php_Mysql_Class_Pdo - Fatal编程技术网

PHP在类中调用databaseclass

PHP在类中调用databaseclass,php,mysql,class,pdo,Php,Mysql,Class,Pdo,我对课程和PDO非常陌生。 我在谷歌上搜索了好几个小时,想找到一个可能很容易解决的问题的解决方案 事情是这样的。我已经创建了一个类来连接到我的数据库。 然后,我创建了一个类,使用查询从数据库加载信息。 然后,我使用一个脚本来组合这两个类。 尽管如此,即使我连接到数据库,在我的另一堂课上,它仍然难以理解它。 我不断发现错误: 未定义变量:db 尝试获取中非对象的属性 对中的非对象调用成员函数prepare() 关于发票类中我的$query=$db->conn->prepare语句的所有内容 我怎样

我对课程和PDO非常陌生。 我在谷歌上搜索了好几个小时,想找到一个可能很容易解决的问题的解决方案

事情是这样的。我已经创建了一个类来连接到我的数据库。 然后,我创建了一个类,使用查询从数据库加载信息。 然后,我使用一个脚本来组合这两个类。 尽管如此,即使我连接到数据库,在我的另一堂课上,它仍然难以理解它。 我不断发现错误:

未定义变量:db

尝试获取中非对象的属性

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

关于发票类中我的$query=$db->conn->prepare语句的所有内容

我怎样才能解决这个问题

我有以下数据库类:

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;
        }       
    }   
}   

?>
然后,有一个从数据库构建信息的类(invoice类)

我用以下基本脚本打开它:

<?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);
?>

$db
在类的主体中不可见。您应该将其作为参数传递(即传递给
Invoice
构造函数,或使用
global


熟悉PHP中的变量作用域()

// (...)
var $customerPostalCode;
var $customerCountry;
var $db;
然后,需要向类“Invoice”添加构造函数,并将数据库实例传递给该类:

public function __construct($db)
{
    $this->db = $db;
}
在类的其他“方法”(函数)中,您需要像这样访问这个成员变量

$this->db->conn->prepare('...');
在“基本脚本”中,只需将类“数据库”的实例传递给类“发票”:


你从来没有给你的发票一个$db的实例。它将如何使用$db?是的,我认为这是一个问题,不知道如何解决它。我最终用“全局$db”修复了它就在查询之前。这似乎很有效。非常好的解决方案!感谢您的回复。我通过在函数中添加一个全局$db来修复它,但我想这个解决方案要好得多!感谢您提供的文档。我知道一两个abotu变量,但这个文档让人大开眼界。Thnx:)
$this->db->conn->prepare('...');
$invoice = new Invoice($db);