【发布时间】:2014-09-23 17:34:14
【问题描述】:
我对课程和 PDO 非常陌生。 我已经在谷歌上搜索了几个小时,以找到一个可能很简单的问题的解决方案。
事情是这样的。我做了一个类来连接到我的数据库。 然后,我创建了一个类来使用查询从数据库中加载信息。 然后,我使用脚本来组合这两个类。 虽然,即使我连接到数据库,在我的其他课程中仍然无法理解它。 我不断收到错误:
未定义变量:db
试图获取非对象的属性
在非对象中调用成员函数prepare()
关于我在 Invoice 类中的 $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;
}
}
}
?>
然后,有一个从数据库构建信息的类(发票类)
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);
?>
【问题讨论】:
-
您永远不会将您的 $db 实例提供给您的 Invoice。它如何与 $db 一起工作?
-
是的,我认为这是一个问题,不知道如何解决它。我最终用“global $db;”修复了它就在查询之前。这似乎奏效了。