我很熟悉课程和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);
?>
答案 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);