меня есть некоторая путаница я думаюПодключение к базе данных доступны для всех классов файлов
Я пытаюсь получить мои соединения с базой данных, чтобы быть доступными для функций в моих файлах классов, так что мне не нужно вводить его в все вызовы функции. я думаю, что это опрятный способ сделать это, но не уверены, ралли
(упрощенный) У меня есть 3 файлов
подключение файлов 1.) баз данных (с использованием PDO)
2.) файла класс с все мои соответствующие функции
3.) файл, который будет главным образом файлом HTML, который включает необходимые соединения класса и базы данных и запускает необходимые экземпляры.
My (упрощенный/вырубить) файл класса
<?php
class SPD_Products {
// varaibales
// start category variables
public $CategoryID;
public $CategoryName;
public $CategoryDescription;
public $CategoryActive;
public $CategoryDateAdded;
public $CategoryDateModified;
/*
* public function to set category varaiables
* @param int $categoryID
* @return true/false
*/
public function setCategory($CategoryID){
try {
if(isset($CategoryID) && is_int($CategoryID)){
if($result = $this->getCategoryByCategoryID($CategoryID)){
$this->CategoryID = intval($result->CategoryID);
$this->CategoryName = htmlentities($result->CategoryName);
$this->CategoryDescription = htmlentities($result->CategoryDescription);
$this->CategoryActive = intval($result->CategoryActive);
$this->CategoryDateAdded = intval($result->CategoryDateAdded);
$this->CategoryDateModified = intval($result->CategoryDateModified);
}
else {
return 'No Category';
}
}
else {
return false;
}
}
catch (Exception $e){
error_log('file = '.__FILE__.'.php class = '.get_class($this).' - function = '.__FUNCTION__.' - Exception caught: '.$e->getMessage());
return false;
}
}
/* ================================================================ */
/* ======================== SQL Queries =========================== */
/* ================================================================ */
/*
* public function to get all category details by CategoryID
* @param int $CategoryID
* @return array of results
*/
public function getCategoryByCategoryID($CategoryID) {
try{
global $db;
$query = "SELECT c.CategoryID, c.CategoryName, c.CategoryDescription, c.CategoryActive, c.CategoryDateAdded, c.CategoryDateModified, c.CategoryShopAvailable
FROM tCategories c
WHERE c.CategoryID = ?
AND c.CategoryActive = 1
AND c.CategoryShopAvailable = 1";
$stmt = $db->prepare($query);
$stmt->execute(array($CategoryID));
return $stmt->Fetch(PDO::FETCH_OBJ);
}
catch (PDOException $ex){
error_log('file = '.__FILE__.'.php class = '.get_class($this).' - function = '.__FUNCTION__.' - Exception caught: '.$ex->getMessage());
echo 'file = '.__FILE__.'.php class = '.get_class($this).' - function = '.__FUNCTION__.' - Exception caught: '.$ex->getMessage();
return false;
}
}
}
?>
Мой файл подключения к базе данных
// database login details
//* Define these so that they can't be changed
DEFINE ('DBUSER', 'xxxxx');
DEFINE ('DBPASS', 'xxxxx');
DEFINE ('DBHOST', '192.168.0.99');
DEFINE ('DBPORT', '3999');
DEFINE ('DBNAME', 'xxxxx');
try {
$db = new PDO('mysql:host='.DBHOST.'; port='.DBPORT.'; dbname='.DBNAME.'; charset=utf8', DBUSER, DBPASS);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $ex) {
echo 'An Error occured! '.$ex->getMessage(); //user friendly message
error_log('dbconn.php failed to connect to db - Exception caught: '.$ex->getMessage());
return false;
}
?>
моя тестовая страница
<?php
require_once('functions/dbconn.php');
require_once('class/products.class.php');
//$db = new Database(); // failed test
$products_obj = new SPD_Products();
$products_obj->setCategory($CategoryID = 1);
echo $products_obj->CategoryName;
?>
Я пробовал различные способы получения базы данных соединение в классе, но работает только глобальный метод (который я не думаю, что это хорошая или аккуратная идея ...) , Вышеописанное работает, но я хочу лучше ... В конечном итоге у меня будет много отдельных файлов классов, поэтому не хочу создавать новое соединение в каждом файле класса, так как я уверен, что могу сделать это только один раз, не используя глобальный и без необходимости продолжать вводить его и передавать его от функции к функции.
Любой совет будет очень благодарен!
Спасибо! Я пробовал это, и попробовал очень похожего раньше, но я продолжаю получать эту ошибку. Неустранимая ошибка: вызвать функцию-член.() Я все-таки имею соединение с БД в $ this-> conn (я думаю) – Ford
Ой, я забыл чтобы добавить $ this в конструкторе, проверьте его снова – meda
хорошо заметили! работает отлично !!! БЛАГОДАРЯ! – Ford